一日かけて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のサンプルを作ってこの土日に疎行列の章を一気に書いてしまいたいものである。