ソフトウェア/Igor のバックアップの現在との差分(No.4)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[公開メモ]]

#contents

* Igor とは [#k3f1dcd4]

データ解析に Wave Metrics 社の Igor Pro を使っています。
測定したデータの解析に Wave Metrics 社の Igor Pro を頻繁に使っています。

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

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

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

* 分野別記事へのリンク [#cb75dc8d]

#ls2("ソフトウェア/Igor")
#ls2(,title)

* Igor のマルチスレッド対応 [#w13d601c]
* ヒストグラムの罠 [#xb711407]

Igor Pro 6.1 から、マルチスレッド対応が強化されたそうです。
Igor の Histogram は癖があるので、正しく使わないとおかしな結果を導いてしまいます。

 LANG:Igor
 wave0 = any_expression(x)
詳しくは、[[棒グラフの罠 - Histogram との組み合わせ>http://dora.bk.tsukuba.ac.jp/~takeuchi/index.php?%A5%BD%A5%D5%A5%C8%A5%A6%A5%A7%A5%A2%2FIgor%2F%A5%B0%A5%E9%A5%D5%B4%D8%CF%A2#e600b145]] をご覧下さい。

のような代入文で時間がかかっている場合、
* 質問・コメント [#k629a3e3]

 LANG:Igor
 MultiThread wave0 = any_expression(x)
#article_kcaptcha

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

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

** より高度なマルチスレッド [#fe54477c]

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

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

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

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

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


Counter: 11418 (from 2010/06/03), today: 4, yesterday: 0