Entry

某 Wavelet ライブラリをチューニングする

2012年07月11日

某所で OSS として公開されている Wavelet ライブラリを趣味プログラミング向けにありがたくいただきました。今ライブラリとしてまとめているのでメモ。

くだんのソースは,学校の先生が作ったそうで,パフォーマンスはそのままでも十分です。大変満足しています。しかしなんつか,もらっておいて言うのもなんだけれども,ちょっとこのままでは使えません。新人君のプログラムでもよくある話なんだけれども,こんな理由で。

  • なぜか malloc(3) の戻りを見ない。
  • 複数のバッファを確保する場合に,後のメモリ確保に失敗しても先に確保したバッファを free(3) しない。
  • 配列の添え字の型がなぜか size_t でなく int 型。
  • 公開ヘッダと非公開ヘッダ(あるいは static な関数,変数)の区別がない。

「らしい」と言えば「らしい」のだけれども,ちょっとこのままでは危ない。とゆか,うちの職場でこんなことしてたらぶん殴られてるところなので(比喩だけど),しこしこ直す。チューニング云々の前に。

コードの方はマルチスレッドには対応しているものの,SIMD には対応していないようなので,コンパイラの最適化の様子を見つつぼちぼちアセンブリでも書いてみるつもり。2次元 Wavelet のバッファの確保方法がちょっと特殊なので,リニアに構成できないかについても検討するつもり。あまりパフォーマンスばかり追いかけても仕方ないんですけどね。

最近は,ライブラリのコア部分をC言語とアセンブリで書いて,インターフェイスを C++ にするところで落ち着いています。なんだかんだ言って,重要なところは C で書いておいた方が圧倒的に使い出がある。他の言語にバインドもしやすい。

なんだか,微妙に労力を食うことになっているけれども,それもまた楽し。趣味だからですね,きっと。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN