大学の実験プログラムをPerlで書いているのですが、
さすがに三日以上もかかるプログラムだと高速化したくなってきます。
数式の処理が重いのかなーとプロファイリングも行わずに、
高速化を試み始めました。
Pure Perlレベルだったらやれることはやったような気がしていたので、
XSに手を出すことにしました。
まぁ具体的にはInlineモジュールを使って
数式処理の部分だけCで書いたりしたのですが。
PerlとCの間の架け橋処理が非常に面倒ですね。
なんなの、SVて。
それがPerlの、何でも入る構造体なんでしょうけどね。
で、sv_2mortalっていうのがさっぱり分かっていなかったんですが、
これやっておかないとメモリリークを引き起こすそうですね。
確保済みの領域を、sv_2mortalで揮発性にするんだとか。
…ここ5日ほどマシンを文回しながら、ページングサイズが1.4GBとかになっていまして。
Perlが保有しているメモリが880MB程行ってたんですよね。
もしかして確保したメモリを揮発性にしてなかったから?
という不安がちょっとよぎりました。
でも実験が3/4ほど終了したとこなんで、
今とめたくないんですけどね。
途中から処理を再開できるようにプログラムを変更すれば済む話なんですが。
Perlの中にCを入り込ませるのは、なかなか色々知識が必要ですね。
No comments:
Post a Comment