幸谷智紀「LAPACK/BLAS入門」森北出版

[ Amazon ] ISBN978-4-627-84881-8, \2600 + TAX

 データ出た出たやっとデータ。悪戦苦闘したと見せかけつつ怠惰に過ごしたこの2年,毎回怒涛の如く押し寄せる編集担当Fさんの問い合わせ要求にきりきり舞いさせられながらもとうとう完成致しました。未完成の原稿を押し付けられて辟易させられた諸先生におかれましてはお詫び申し上げますと共に要らないといっても献本送り付け差し上げますのでどうぞ当方になり替わりまして恨みつらみ晴らして頂きたくいかようにもお使い下さいませませ。薄いから普通の五寸釘で打ち込めると思います。

 しかし出来上がってみればA5版で135ページ足らずのうっすいテキストなのに定価2600円(+消費税)とは暴利ではないかと訝しむそこのあなた! これでも安くしたのですよ,なにせ初版部数を売り切れるとはとても保証いたしかねる代物だし,弱小理工系出版社としては誠にリスキーな物件であるからして3000円でもどーだろーという線を何とか踏みとどまって頂いてこの価格に抑えたのですよこれでも! いーじゃない紙だけデカくて分厚くて開きづらいどっかのICTマニュアル本に比べれば,LAPACKEとCBLASとIntel Math Kernel Libraryと疎行列とMAGMAとcuBLASの解説に加えてOpenMPやPthreadまで言及しちゃってるんだから勘弁して下さいよ旦那。テキスト本体は薄くても,こっちゃどんだけしんどい思いして大量(でもないか)のプログラムを書いたとお思いか!

 まぁ,前書きにも書いたけど,この本,Web情報だけでスラスラLAPACKE, CBLASを使いこなしてプログラムをジャカジャカ書けるよーなパワフルな人向けには一切書いてませんので,読むだけ無駄,買うだけ無駄。とっととGoogleってBingってお仕事に邁進して下さいな,こちとら「行優先ってなーに?」「LU分解って酵素パワーみたいだけど洗剤?」「GPUってお絵かきのどーぐ?」ってなド素人向けに商売しようってんでぇこのすっとこどっこい。連立一次方程式と固有値問題とBLAS活用だけに話題を絞ってどんだけのことができるかっていうHPC業界と数値解析業界からは蝙蝠野郎と白い目見られそーな類書がないテキストなんでいっ。お手本がないテキスト書くってホントしんどいもんなんだよ全く,迷路みたいで精神的に参った参った。人様が積み上げたライブラリにすがってプログラムと解説書くだけでこんだけしんどいのに,全く漫画家さんとか小説家さんは偉いよなぁ,毎回読者を引き込むストーリーをスクラッチから考えなきゃいかんのだから全く頭が下がります。

 つーことで,章立てとかバグ情報とかプログラム一覧はサポートページを見て下さいな。「あの膨大なLAPACK/BLASの全解説?」ってんなわきゃねーだろっての目次見て目次。詐欺だといわれないよーに予防線張っておきますんでその辺誤解のないように一つヨロシク。まぁ学部2~4年生辺りでCは触ったことあるけどボチボチ高速な線型計算を使わないとダメなんだけど自分で書くのはシンドイという状況にある学生さんにとっては導入用としてはそこそこお役に立つのでは?ってな内容でございます。書店や図書館で見かけたらお手に取ってご覧くださいませ。で,間違いあったらお知らせ下さいませ。

 で,心は既に「多倍長数値解析入門(希望的タイトル)」に飛んでたりするんで,もちっと本格的なLAPACK/BLAS本をお望みでしたらちゃんとした線型計算・HPC屋さんにご依頼して下さいまし。なにせこの界隈の方々が立派な解説書書かないからこっちにお鉢が回ってきちゃったんだからねっ!

How to compile a LAPACKE program on Windows 8.1 x64

 Windows 8.1 x64環境下でのIntel Parallel Studio XE 2016 + Visual Studio 2016を使ったLAPACKEプログラムのコンパイル方法のメモ。

1. 必要な環境変数一切合切を用意してくれるCUIショートカット「コンパイラ―16.0 Update 2インテル(R) 64 VS2015環境」を起動

スクリーンショット 2016-02-29 17.17.43

2. LAPACKEソースプログラム”lapack_dgesv_mkl.cを置いた”c:\lapack”へ移動

2016-02-29_190704

3. シリアル実行の時はicl (C/C++コンパイラ) を使って,例えば

c:\lapack>icl lapack_dgesv_mkl.c /link mkl_intel_lp64.lib mkl_core.lib mkl_sequential.lib

とする。

4. Intel Threadを使ってパラレル実行の時はiclコマンドを使って,例えば

c:\lapack>icl lapack_dgesv_mkl.c /link libiomp5md.lib mkl_intel_lp64.lib mkl_core.lib mkl_intel_thread.lib

でコンパイル。
Core i5-2500 (4 cores)で実行すると下記のようになる。

戸川隼人「マトリクスの数値計算」オーム社

Matrix Computation

(絶版) [ Amazon ] ISBN 4-274-07008-5, \4301 + TAX

 Wikipedia風に本書の著者紹介をすると次のようになる。

戸川隼人(1936 – 2015) 1958年早稲田大学第一理工学部数学科卒,1971年まで科学技術庁航空宇宙技術研究所(現JAXA)研究員,1976年まで京都産業大学助教授→教授,2000年まで日本大学理工学部数学科教授,その後,尚美学園大学,サイバー大学で教鞭を取る。数値解析,数値計算,プログラミング, CG,情報処理全般の著作多数。

 理工系大学・専門学校でプログラミングを学んだ,現在40歳以上の元学生の諸氏は,C, Fortran, Visual Basic等のテキストの著者として認知しているのではないかと思われる。特にサイエンス社からは多数の書籍を出しており,関連会社の数理工学社のテキストや「数理科学」の表紙絵も描いていた。個人的には器用で世渡りのうまいタイプの秀才だったという認識を持っている。

 本書は著者自身による著作リストにも入っていないオーム社からのロングセラーで,ワシの手元にあるのは平成4年(1992年)の「第1版第17刷」である。現在は絶版品切れ状態だが,21世紀になってもひょっとしたら生き残っていた可能性もある。第1刷が刊行されたのが昭和46年(1971年)だから,かれこれ40年以上も継続して読まれ続けたということは,ことこの分野の書籍としては異例で,しかも第1版のまま改定もされずに生き残っていたのだから,記述そのものがそれほど古びなかった,ということである。内容は「マトリクス」(行列)ということから類推できる通り,連立一次方程式と行列の固有値問題がメインであるが,執筆当時は最先端の話題であった区間演算,キングサイズ(今でいう大規模問題)向けの計算法,疎行列の扱い・・・に加えて「高次代数方程式」(第4章),「常微分方程式の初期値問題」(第5章)まで扱っており,内外の文献を集めまくって精力的に執筆を行ったことが巻末の膨大な文献リストからも伺える。実際,現代でもこの分野の勉強の一環として本書に目を通す価値はあるだろう。但し,あくまで参考程度に留めるべきである。

 著者の履歴を眺めていて気が付くのだが,本書刊行時点ではまだ博士号を取得しておらず,母校・早大から博士論文「ロケットの運動の数値解析的研究」が認められたのが4年後の昭和50年(1975年)である。多分,本書の記述に使われた膨大な文献は,航空宇宙研在籍時からのものも含め,博士論文執筆のために存分に利用されたのだろうと推察できる。
 残念ながら,その後,本書は改版されることなく,当然その後の研究の進展も,Linpack, Eispack,そして統合されたLAPACK/BLASと派生ライブラリの高速性については全く触れられないままとなってしまった。書籍ではありがちのことではあるが,科学技術計算基盤が大型計算機からワークステーションやパソコンに移ってしまった1990年以降の技術動向を著者は全くフォローしていなかったようなのである。

 実はワシはちょうどその時期に博士号の取得のために永坂秀子先生の実質的な指導の下,著者に主査をお願いしていたのだが,研究そのものについての役立つアドバイスは皆無であり,博士号取得の要件となる査読論文はほぼ全部,ワシと永坂先生との共著として出版したものである。とはいえ,いざ博士号の審査となれば,著者の顔の広さを存分に発揮して頂き,副査として日大工学部に移っていた田中正次先生と,物理学科の川上一郎先生という大御所を付けて頂いたことは今でも感謝している。しかし,肝心の論文の中身についてのアドバイスは地に足のついたものではなく,正直イラつくことが多かった。当時は数値解析よりもCGやプログラミング言語の方に著者の関心が移っていたことも原因であろうが,やっぱり,数値線型代数に関する最新知識の習得は怠っていたのかなぁと思わざるを得ないのである。

 本書に関しては,今でも内容的に使えるところが結構ある反面,更に高度に発展した技法があり,それを取り込んだLAPACK/BLASが既に無料で入手できる状況にあることを鑑みると,歴史的価値以上のものを見出すことは難しいというのが今の偽らざるワシの感想である。理論的な記述,本書で言うとQR法の収束の解説などはさすがに心血を注いでいるだけあって分かりやすいが,同様のものは森正武「数値解析」(共立出版)にもあるので,本書が唯一無二の数値線型代数中心のアルゴリズム解説書であるという記述はそんなに多くはないのではないか。それよりは1970年代初頭の段階でのこの分野の動向,そしてその当時の著者の博覧強記ぶりを知るための歴史的資料として捉えるべきであろう。

 ワシが現在刊行を目論んでいる「LAPACK/BLAS入門」(仮)は,実は本書の記述に対する一種の「恩返し」の意味合いも込められている。まことに嫌味で反抗的だった院生として著者に対し「先生の書いた数値線型代数の技法は全てLAPACK/BLASにつぎ込まれて更に洗練されてますよ」と言いたくて書いているところもあるのだ。ちょうどその執筆に苦しんでいる時期に著者が亡くなっていたことをこの年の瀬に知ったこともあり,博士号取得に際して散々お世話になった「お礼」も兼ねてこの小文を書くことにしたのである。

[進捗報告] 関数リファレンス,参考文献,索引挿入

 最終章を書きながら前の商を見返していたのだが,関数リファレンスとしての使い勝手が悪いので,下記のような表を挿入しまくり,最終的に10ページ近く増えてしまったぞい。

2015-11-29_173518

 あと,不完全だった参考文献,索引も入れてみた。後は校正しながら書き直す程度かなぁ。

 残っている一番の問題はWindows環境でのLAPACK/BLASの使い方の解説なんだが,本家提供のWindows用が出るまで待つか,3.5.0で書いちまうか,まだ思案中なう。

 とりあえず11月末までに全部できたので,後はチマチマ直していこうっと。もう心は「多倍長数値計算入門(仮称)」に飛んでいるのであるからして~。

[進捗報告] 最終章一応完成

 Hammerstein型積分方程式の解法に衣替えした最終章,一応完成。固有値問題,連立一次方程式のどちらも使ってなおかつ平易(かな?)な問題を対象に,Derivative free解法を使う内容になったので,まぁとりあえずはおさまりがいいと思っている,思いこんでいる,思いこまなきゃやってられないと思っている。

 ふひ~,これで来週一杯かけて手直しして出版社に投げることができる。最終章を書くにあたりつたつら前の章を参照したが,思いのほかreferenceとしての使い勝手がよろしくないので,その辺りの修正がメインかしらん。あとはWindows環境だが,LAPACK 3.6.0のWindows版(ここに出るはず)が出てからにしたいなぁと思いつつ,まぁ3.5.0で困るという内容ではないので一応は使えるんだけど,Reference BLASを使うためのcblas.hとcblas_f77.hがどこにも入ってない。結局,Windows環境ではスタンダードなVisual C++で使おうとするとこれを持ってこないといかん。CBLASが同梱されている3.6.0なら楽なんだろうなと愚考する次第。まぁ後はタイミングの問題かな。

 つーことで1年かかってようやっとここまでこれました。A4サイズで111ページってのはちと少ないかなぁと思いつつこの辺りでやめておかないとA5にした時に200ページ越えちゃうぞと。

 風邪ひいて死にそうなのでまずは寝ます。