ソフトウェア/Igor のバックアップ(No.4)

更新


公開メモ

Igor とは

データ解析に Wave Metrics 社の Igor Pro を使っています。

なかなか癖のあるソフトですが、 Igor 上でプログラムを組むことでかなり複雑なデータ解析も自動化できていろいろ捗ります。

ここには使い回しの効きそうなコード例を上げていこうと思います。

公式のオンラインヘルプはこちら: http://www.hulinks.co.jp/support/igor/programming/index.html

分野別記事へのリンク

Igor のマルチスレッド対応

Igor Pro 6.1 から、マルチスレッド対応が強化されたそうです。

LANG:Igor
wave0 = any_expression(x)

のような代入文で時間がかかっている場合、

LANG:Igor
MultiThread wave0 = any_expression(x)

とするだけで、個々の座標値に対する計算を異なるスレッドで行ってくれます。

当然、wave の個々の座標の値の間に依存関係がある場合にはうまくいきませんが、 独立に計算できる場合にはこれだけでかなり速度が上がります。

より高度なマルチスレッド

もっと複雑なことをしたい場合には、 ThreadGroupCreate / ThreadStart / ThreadGroupPutDF / ThreadGroupGetDF / ThreadGroupWait / ThreadGroupRelease といった関数を使うことで、きめ細やかなマルチスレッド制御を行えます。

実際やってみると、メモリ確保などに時間がかかっていることも多いようで、 単純にスレッド数倍もの速度向上は望めませんが、シングルスレッド比で 2倍くらいの速度は簡単に出せるようでした。

例えば、Intel Core i7-3520M @ 2.9GHz + Windows 7 (64bit) で 1024 本のスペクトルに対して解析を行った結果、

  • シングルスレッド = 11.0 秒
  • マルチスレッド = 4.3秒

という結果が得られました。


Counter: 11545 (from 2010/06/03), today: 2, yesterday: 0