更新日: 17/09/12

64 bit 対応とパフォーマンス

 

64 bit 対応

Igor Pro 7 では、正式に 64bit 版がリリースされました。64 bit の Windows OS では、64bit 版の Igor Pro と32bit 版の Igor Pro をそれぞれ選んで起動することができます。

 

一方、Macintosh でも、64bit 版と 32bit 版をそれぞれ選んで起動することができます。

 

64 bit 対応のアプリケーションの最大のメリットは、32 bit 版に比べて大きなメモリを利用できるため、たくさんのデータ (ウェーブ) を扱えるようになることです。32 bit 版の Igor Pro で扱うことができるデータポイント数は、倍精度浮動小数点 (8 byte/ポイント) ウェーブの場合、1ウェーブあたりおおよそ 2500万ポイントでした。

2GB/8byte/ポイント= 2×109byte/8byte/ポイント = 2.5×108ポイント

64 bit 版ではこの上限はぐっと拡張されていますが、一方で Make操作関数を使えば、簡単に搭載メモリを超えるサイズのウェーブの宣言が可能であるため、内部的に、21billion (21×109) ポイントが上限として設定されています。これを倍精度浮動小数点で確保するには、168GB もの物理メモリが必要ですので、十分現実的な上限設定になっていると言えます。

なお、開発元 WaveMetrics社が提供している XOP は 64 bit 対応していますが、サードパーティが提供している XOP をお使いの場合は、XOP が 64 bit 対応していない可能性があります。その場合には、32 bit 版の Igor Pro を利用する必要がありますので、ご注意ください。

 

パフォーマンス

大きな実装メモリを利用して、たくさんのデータを扱うことができることは、必ずしも、処理が高速になることを意味するわけではありませんが、Igor Pro 7 では多くの関数/操作関数がマルチスレッド対応になり、実行するだけで、自動的に並列処理される関数も画像処理を中心に増えています。バージョン7.05 では、下記のように 21個の操作関数が自動で並列になっています。

ヘルプブラウザで自動的に並列処理される関数を表示

 

以下では、ImageInterpolate 操作関数を例に挙げて、自動マルチスレッド対応の効果を確認してみます。テストした環境は下記の通りです。

テスト環境

項目 内容
OS Windows 10 Pro
Igor Pro 6.36 J および 7.05 J
CPU Intel Core i7-4810MQ 2.80GHz
RAM 16GB

ImageInterpolate操作関数は画像データ (2次元ウェーブ) を補間処理する関数で、様々な手法に対応しています。ここではトリプレットデータ (XYZ 3列のマトリクスウェーブ) を Voronoi法を使って補間します。

Igor Pro 6 と Igor Pro 7 とでは、処理に要する時間の短縮が期待されますので、所要時間を計測するために次のような関数を定義します。

Function ImageInterpolateTest()
	Variable timerRefNum
	Variable microSeconds
	Variable n
	timerRefNum = StartMSTimer
	if (timerRefNum == -1)
		Abort "All timers are in use"
	endif

	Wave triplet
	ImageInterpolate/RESL={1000,1000}/I=2 Voronoi, triplet

	microSeconds = StopMSTimer(timerRefNum)
	Print microSeconds/1000000, "seconds for interpolation"
End

Igor Pro にはミリ秒単位で稼働するタイマー (StarMSTimer関数と StopMSTimer関数) がありますのでこれを使って、ImageInterpolate操作関数の所要時間を履歴エリアに出力するようになっています。ImageInterpolate操作関数では、triplet という入力データを 1000×1000 のマトリクスに補間しますので、あらかじめ、triplet という名称のトリプレットウェーブを用意する必要があります。

上記の関数をプロシージャウィンドウに貼り付けてコンパイルして、triplet という名称のトリプレットウェーブを用意出来たら、コマンドラインで

ImageInterpolateTest()

と入力して実行します。粗い画像が滑らかになっていることが確認できます。


ImageInterpolate 処理前後のイメージプロット (左:元データ、右:補間処理後のデータ)

前述の環境の Igor Pro 7 では、20秒程度で処理されますが、Igor Pro 6 では 77秒程度を要し、このケースでは、3.5倍程度の速度の向上が確認されました。

ImageInterpolate (上:バージョン7、下:バージョン6)


CurveFit操作関数も,同様に自動マルチスレッド対応になりましたので、組み込みの関数を使ってフィッティングする場合には、速度の改善が期待できます。1000×1000 の 2次元マトリクスウェーブを、組み込みの Gauss2D関数を使ってフィッティングする例を用意しましたので、ご興味のある方はエクスペリメントファイルをダウンロードして、

CurveFitTest()

をコマンドラインで実行してみてください。ImageInterpolate の例と同じように、タイマーを使って処理時間が履歴エリアに出力されます。上記の環境では 9倍近く、高速化されています。

 

注:利用した操作関数、関数の詳細は付属のヘルプ、マニュアルをご参照ください。