昨日作ったMatrix Market (mtx)ファイル(Coordinateタイプ)を読み込んで係数行列とするJacobi反復法のプログラムを作成。まずはSparse BLASで動くようにした。
この後はIMKL→MAGMA→cuSPARSEと3バージョン作る予定なのだが,COO(rdinate)形式をサポートしてないのにmtxファイルを直接読み込むAPIのあるMAGMAの説明は変えなきゃいかん。cuSPARSEはCUDA 7で登場したcuSOLVERとの絡みも説明しようと思ったが,API見てたら行列分解ぐらいしかないのでどうしようかなと思案中。Thrustは完全C++で,直接cuSPARSEを扱えるかどうか調べている暇がないので,余裕があれば使うことにして今回はスルー予定。
[進捗報告] Matrix Market I/Oライブラリ一応完成&SparseBLASと連結
一日かけてMatrix Market I/Oライブラリ書き直し。自分で書いてみると構造がよく分かって勉強になるが,ファイル処理のテキストじゃないのでどの辺でやめるべきか悩む。
結局
mm_is_valid
mm_typecode_to_str
mm_read_banner
mm_read_mtx_crd_size
mm_write_crd_size
mm_read_unsymmetric_sparse (obsolete?)
mm_read_mtx_array_size
mm_write_mtx_array_size
mm_read_mtx_crd_data
mm_read_mtx_crd_entry
mm_read_mtx_crd
mm_write_mtx_crd
の関数群はほぼオリジナルと同じものになっている。mm_read_unsymmetric_sparseという実数しか扱えない中途半端な関数も一応は動くようにした。
で,なんでこれがないのかと疑問に感じた
mm_read_mtx_array_data
mm_read_mtx_array_entry
mm_read_mtx_array
mm_write_mtx_array
mm_print_header_mtx_crd
mm_print_header_mtx_array
は書き足した。特にヘッダ情報と頭のデータを表示するmm_print_header関数はあると便利である(ファイル名と表示行数のみの指定で使える)。
で,Sparse BLASのANSI Cバージョン(0.8)と組み合わせて使うプログラムを作成。一応動いている模様。扱う疎行列フォーマットはCoordinate,CSR, CSCのみの予定。コンバート関数の力を借りて例題を適当に作っちゃおうと思案中。
次はIMKLとcuSPARSEのサンプルを作ってこの土日に疎行列の章を一気に書いてしまいたいものである。
[進捗報告] Matrix Market I/Oライブラリを書き始める
疎行列の章を書くにあたってMatrix MarketのI/Oライブラリが必要になるので,オリジナル版と同じ関数が使えるように一から書き直し。著作権表示がないからそのまま流用ということも考えたが,定数定義やら関数の少なさを考えると自分で書き足す分も含めて一からから書き起こした方がいいかなと。
1/3ほど書いたところで疲れたのでここまで。明日中に動かして章立ても含めて考え直す予定。今のところ「疎行列」→「GPU」という章立てだが,逆にして「GPU」→「疎行列」の方が,IMLKとcuSPARSEを扱得ていいかなと。そもそもオリジナルのSparse BLASだけだと使いもんにならないしなぁ。
[進捗報告] GPUの章とりあえず埋める
一番埋まっていなかったGPUの章の解説をとりあえず埋め,密行列については何とか全章の解説は繋がるようになった。疎行列についてはSparse Matrix Collectionを紹介してMatrix Marketフォーマットの解説が必要なんで,今週ボチボチやることになる。しかしこのmmioライブラリ,著作権表示もないけど,どういう扱いにしたらいいんだか。
[進捗報告] dgeevベンチマーク続行中
う~む,左右固有値を全部出しているせいなのかなぁ,K20がGTX780より遅いのは・・・等とぶつぶつ言いつつベンチマークに勤しむのみ。明日中に何とかGPUの章は埋めたいぞと。次週はSparse Matrixの章を書かなくては。