マルチ CPU コンピュータでの Zemax OpticStudio の実行


マルチ CPU コンピュータでの Zemax OpticStudio の実行

Author
Message
Zemax_Japan
Zemax_Japan
Forum Member
Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)

Group: Administrators / Zemax Staff
Posts: 257, Visits: 2.4K
概要 :この記事では、マルチ CPU 演算について詳しく説明し、複数のプロセッサで演算性能を引き上げることができる様子をいくつかの計算例で示します。この記事は、元々 OpticStudio のリリース前に執筆されたものです。

この記事は OpticStudio の変更を反映して更新されていますが、以下の性能例では Zemax の旧バージョンを使用しています。マルチスレッドの主な概念はすべてのバージョンに適用できます。

関連記事
OpticStudio のシステム要件
マルチ CPU と GPU (Multi-CPU and GPU)
Zemax OpticStudio の実行に必要なコンピュータ
Zemax OpticStudio のマルチスレッド化した最適化

著者 :Mark Nicholson

公開日 :2016 年 11 月 16 日

サンプル ファイル :

対象 :インストールとトラブルシューティング



目次

Zemax および OpticStudio のソフトウェア アーキテクチャ
8 コア コンピュータでの Zemax の性能
すべての機能でマルチコアが使用されるかどうかという疑問
まとめ


Zemax および OpticStudio のソフトウェア アーキテクチャ

Zemax および OpticStudio は、その開発当初からマルチスレッド アプリケーションとして制作されています。OpticStudio は 64 ビット アプリケーションで、ユーザによる指定がなくても、最大で 64 個の CPU コアをサポートします。32 ビットの旧バージョン (販売終了) では、サポートされている CPU コア数は最大で 16 でした。

これは、メイン メニュー ウィンドウも含め、Zemax のすべてのウィンドウが、実際には互いに独立したスレッドとして動作しているということです。Zemax の SE と EE はどちらも全面的にマルチスレッド対応であり、料金やライセンスの追加を必要とせずに、PC に搭載されたすべての CPU が使用されます。OpticStudio では、光線追跡、回折の解析、最適化などの長時間を要する計算が、複数の並列処理に自動的に分割されます。たとえば、1 つのプロセッサで 1 本の光線を追跡しながら、別のプロセッサでは別の光線を追跡し、さらに別のプロセッサで 3 本目の光線を追跡するといった方法で計算を分担し、最後にそれぞれの結果を結合します。

ここでいう「スレッド」とは、特定の計算を実行するうえで必要なデータのパッケージです。スレッドを生成する処理とそれらのスレッドをマシン上にある CPU に割り当てる処理は区別して考える必要があります。生成はアプリケーションで実行され、割り当てはオペレーティング システムで実行されるからです。

Zemax で表示されるすべてのウィンドウはそれぞれが固有のスレッドなので、あるウィンドウを更新しながら、同時に他のウィンドウの設定を編集するといったことが可能です。



この例では、FFT MTF ウィンドウで再計算が進行中ですが、像面湾曲プロットの設定にアクセスし、MTF の計算とは独立してその設定を更新できます。このことから、Zemax では、解析機能の計算の完了を待たずに、他の計算の開始や変更が可能です。

CPU が 1 個のみのマシンでも、高度にマルチスレッド化したコードであれば、きわめて効率的な実行が実現するという利点が得られます。しかし、マシンが複数の CPU を搭載している場合のメリットは計り知れません。個々のスレッドを別々の CPU で実行できるからです。さらに有利な点として、Zemax の多くの解析ウィンドウとツールは本来的にマルチスレッド化されているので、演算が自動的に複数の CPU に分割されることが挙げられます。幾何光学的ビットマップ像解析はその一例です。この後、別の例についても検討します。さらに、このように複数の CPU が使用されていることをユーザ側では特に意識する必要がありません。

使用する最適なスレッド化レベルは、Zemax とオペレーティング システムとの間で調整して決定されます。
光線追跡、回折の解析、最適化などのきわめて長時間を要する計算が、複数の「スレッド」というタスクに自動的に分割されます。ここでは幾何学的ビットマップ像解析機能を例として挙げます。この機能については、ナレッジ ベースの記事「写真のようにリアルな像を生成する方法」に詳しい説明があります。下図のような .jpg または .bmp のビットマップ画像を使用します。



これらの画像の各ピクセルからディテクタまで光学系を伝搬する光線を追跡します。結像性能が低い結像光学系では、次の図のような像が得られます。



搭載している CPU が 1 個のみのコンピュータの場合、Zemax では一度に 1 つのピクセルのみから発するすべての光線をディテクタまで追跡し、これをピクセルごとに順次繰り返します。一方、4 個のプロセッサを搭載したマシンの場合、処理は次のように分割されます。



この計算は、CPU が 1 個のみの場合に比べて 4 倍高速に実行できますが、画像の分割、スレッドの起動、スレッド処理が返るときのデータの受け渡し、データを結合して元の 1 つの画像に戻す処理などによって若干のオーバーヘッドが発生します。ソフトウェアを適切に設計すれば、このオーバーヘッドを最小限に抑えることができますが、皆無にすることはできません。


8 コア コンピュータでの Zemax の性能

著者は、Dell 690 ワークステーションを入手しました。このマシンは 8 GB の RAM を備え、Windows XP 64 ビット版で稼動しています。Xeon X5355 CPU (1 CPU あたり 4 コア) が 2 基搭載されています。




ハイパースレッド機能に関する注意事項

この Xeon CPU にはハイパースレッド機能がありません。ハイパースレッド機能を搭載した CPU を使用する場合は、以下の説明を参照してください。ハイパースレッド機能は、マルチコア CPU 以前に設計された古いテクノロジです。
このテクノロジでは、空いている CPU サイクルを Windows 上で第 2 のプロセッサのように割り当てます。しかし、ハイパースレッド機能では、メイン コアと実行ユニットを共有することから、実際の CPU コアに迫るほどのパフォーマンス向上は望めません。OpticStudio では、コアをほぼすべて使用することが普通なので、ハイパースレッド機能によるパフォーマンス向上は通常数パーセントにとどまります。逆に、ハイパースレッド機能に起因して多少のパフォーマンス低下が見られることさえあります。


パフォーマンス テストの実行

OpticStudio では、[ヘルプ] (Help) タブにパフォーマンス テスト機能が用意されています(Zemax 13 以前では、[ツール] (Tools) → [その他] (Miscellaneous) にありました)。パフォーマンス テストでは、ある特定のコンピュータ ハードウェアとレンズの組み合わせで、1 秒あたりに処理可能な光線と面との交差回数および光学系の更新回数を確認します。パフォーマンス指数である 1 秒あたりの光線と面との交差回数は、現在の光学系で多数のランダム スキュー光線を追跡し、(光線数) × (追跡で通過した面の数) ÷ (経過時間 (秒)) で求めます。これは光線追跡の速度との関連性が最も高い数値指標です。

1 秒あたりの光学系の更新数は、光学系の更新を多数回実行し、その回数を実行の経過時間 (秒) で除算して求めます。
光学系の更新には、瞳の位置、視野データ (レイ エイミングの座標など)、レンズ アパチャー、屈折率、ソルブの再計算、その他すべての光線追跡で事前に実行する必要があるレンズに関する基本的なチェックが含まれます。

計算速度は、システム プロセッサ、クロック スピード、レンズの複雑さなどによって著しく変動します。
Zemax LLC では、さまざまなマシンでの性能を比較するためのテスト ファイルとして、Zemax に付属するダブル ガウスのサンプル ファイルを使用することを標準としています。8 個の Xeon コアを搭載したこのマシンで、2007 年 7 月 25 日リリースの Zemax を実行して次の結果が得られました。

http://forum.zemax.com/Uploads/Images/1a47c9b9-2959-48c5-8744-60df.gif

光線と面との交差回数は 1 秒あたり 9,300 万回を上回りました。
これは光線追跡としては驚異的な演算速度です。また、この速度は、計算の実行に使用した CPU 数ときわめて正確な正比例関係にあります。

http://forum.zemax.com/Uploads/Images/d64e7be2-0bb9-43d2-b3aa-4c0a.gif


すべての機能でマルチコアが使用されるかどうかという疑問

Zemax のどの機能もそれぞれ独立したスレッドとして実行されるので、他のどの機能の実行にも依存していません。ただし、すべての機能が内部でマルチスレッド化されるわけではありません。スレッドの起動と管理、計算が完了したスレッドからのデータ受け渡し、結果を結合して元に戻す処理により、オーバーヘッドが発生します。

さらに、スレッドごとにすべてのレンズ データの完全なコピーを保持する必要がある点も重要です。すべての機能がそれぞれ複数の内部スレッドを次々に生成すると、必要となるメモリー量は急速に増大します。

このことから、高い計算能力を必要とする機能のみが内部的にマルチスレッド化されています。このような機能として、最適化、グローバル最適化、公差解析、ホイヘンスの計算、回折の計算、物理光学系、ノンシーケンシャル光線追跡などがあります。個別の解析機能の多くも内部でマルチスレッド化されています。Zemax は、マルチスレッド化を管理し、処理する作業に応じてマシンのリソースが最適に使用されるようにしています。

例として、デフォルトの波面評価関数を使用してダブル ガウスのサンプル ファイルを最適化します。曲率半径が無限大の面を除き、すべての曲率半径と厚みを変数にします。最後の曲率半径に f/3 を目標値とする f/# ソルブを設定します。
次のようなデフォルト評価関数を作成します。

http://forum.zemax.com/Uploads/Images/6738cf5e-ac92-4ad0-bc1a-6108.gif

8 個の CPU すべてを使用することを Zemax に指定して、この評価関数による最適化を実行します。


http://forum.zemax.com/Uploads/Images/7f9da1c2-4715-4f17-8090-d26a.gif

減衰最小二乗法 (DLS 法) では、変数ごとに評価関数の導関数が計算されるので、マルチスレッド化は変数レベルになります。これにより、各導関数を個別のスレッドで計算できます。しかし、最適化機能を実行すると、



使用されている CPU が 1 つのみであるという意外な結果が得られます (CPU 使用率が 13% なので、マシンに搭載された 8 個の CPU のうち、使用されているのは 1 個のみです)。この理由を検討してみます。

まず、この問題がマルチスレッド化のメリットを生かすには簡単すぎるという一面もあります。または、少なくとも、この問題ではマルチスレッド化が不要なくらいに Zemax がきわめて効率的に実装されているということもいえます。
次の簡単なマクロを実行します。

! How long does it take to compute the merit function?
FORMAT 4.3 EXP
cycles = 100
TIMER # set the timer
FOR i = 1, cycles, 1
dummy = MFCN() # update the merit function
NEXT i

PRINT "The average time to compute the merit function is: ", ETIM()/cycles, " seconds"

PRINT "Program End"
END


次のような結果が得られます。

Executing C:\Program Files (x86)\Zemax\MACROS\QUICKIE.ZPL.
The average time to compute the merit function is: 3.100E-004 seconds
Program End

このマシンのプロセッサ 1 個でこの評価関数を計算するために要する時間はわずか 310 マイクロ秒に過ぎません。ここで取り上げているこの評価関数は、3 つの視野で 3 つの波長における RMS 波面収差を対象としています。この結果は、Zemax のガウシアン求積法 (GQ) アルゴリズムと DLS アルゴリズムがきわめて高効率であることを示しています。これほど高速で評価関数を計算できるようになると、すべてのデータのコピー、スレッドの起動、スレッドからのデータの受け渡しで発生するオーバーヘッドが無視できなくなります。この評価関数に DENC (回折エンサークルド エネルギー) オペランドを追加すると、CPU の使用率は 100% に近付きます。



一般的に、複数 CPU に分配可能な「並列化可能」な処理と、単一スレッドでのみ実行可能な直列の処理に演算が分割されます。タスク マネージャーに表示される CPU 使用率は概算値ですが、マルチスレッド化された処理を実行している間は、この値が 13% (1 個の CPU のみを使用している状態) から 100% の間で変動します。

マルチコアによる最適化で CPU 使用率を低減する具体的な方法の詳細については、ナレッジベースの記事「Zemax OpticStudio のマルチスレッド化した最適化」を参照してください。


まとめ

Zemax は、ユーザ側で特に指定しなくても、コンピュータに搭載されたすべての CPU を使用するように設計されています。所定の演算を実行するうえで起動する必要があるスレッドの数が自動的に判断されます。光線追跡、回折の解析、最適化などのきわめて長時間を要する計算が、複数の並列処理に自動的に分割されます。シングル コアの方が高速となる演算は、シングル コアを使用して処理されます。

GO


Similar Topics


Login
Existing Account
Email Address:


Password:


Select a Forum....



































Zemax Users Forum


Search