ソフトウェア/Igor のバックアップの現在との差分(No.6)
更新- 追加された行はこの色です。
- 削除された行はこの色です。
[[公開メモ]] #contents * Igor とは [#k3f1dcd4] 測定したデータの解析に Wave Metrics 社の Igor Pro を頻繁に使っています。 なかなか癖のあるソフトですが、 Igor 上でプログラムを組むことでかなり複雑なデータ解析も自動化できていろいろ捗ります。 ここには使い回しの効きそうなコード例を上げていこうと思います。 公式のオンラインヘルプはこちらです。~ http://www.hulinks.co.jp/support/igor/programming/index.html * 分野別記事へのリンク [#cb75dc8d] #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秒 という結果が得られました。 ** 注意点 [#w6cc64fa] このようにマルチスレッドで使う関数、例えば SomeMutiThreadableFunction(x) には ThreadSafe というキーワードを付けて定義する必要があります。 LANG:Igor ThreadSafe function SomeMutiThreadableFunction(x) // マルチスレッド対応コード end このような ThreadSafe な関数からは、同じく ThreadSafe とマークされた関数以外を呼び出せません。 やってみるとすぐ分かるのですが、現在のところ ThreadSafe とマークした関数には デバッガ機能が働かず、ブレークやステップ実行ができません。 シングルスレッドで十分にテストしてからマルチスレッドに移行しないと、 うまく動かないときに面倒なことになります。
Counter: 14282 (from 2010/06/03),
today: 1,
yesterday: 4