<すべての機能でマルチ プロセッサが利用されるか>ZEMAX の各機能は個別のスレッドで実行され、他のすべての機能から独立しています。
ただし、すべての機能が内部的にマルチスレッド化されているわけではありません。
スレッドの起動と管理、スレッド完了時のデータの受け取り、結果を再度つなぎ合わせる処理には必ずオーバーヘッドが発生します。
また、各スレッドはすべてのレンズ データの完全なコピーを持つ必要があります。
すべての機能で複数の内部スレッドが生成されると、メモリー使用量が急激に上昇します。
そのかわりにZEMAXでは、計算負荷の高い機能が内部的にマルチスレッド化されます。
これには、最適化、グローバル最適化、公差解析、ホイヘンス計算、回折計算、物理光学、ノンシーケンシャル光線追跡が含まれます (ただし、これらに限られません)。
また、多くの個別解析機能が内部的にマルチスレッド化されています。
ZEMAX では、実行タスクがマシンのリソースを最適に使用できるようにマルチスレッド機能が管理されます。
たとえば、波面のデフォルトメリットファンクションを使用して、Double Gauss サンプル ファイルを最適化してみましょう。
半径 (無限半径の表面を除く) および厚さをすべて可変にします。
最後の半径に f/# ソルブを配置し、それを f/3 に設定します。
次に、デフォルトメリットファンクションを次のように設定します。
添付ファイル:
merit%20function.gif [ 11.4 KiB | 表示回数: 741 回 ]
次にこれを最適化するために、ZEMAXは搭載されているCPU数を自動検知しますので、8 個の CPU をすべて使用するように指定します。
添付ファイル:
optimization.gif [ 8.55 KiB | 表示回数: 744 回 ]
DLS (Damped Least Squares) の最適化には、変数ごとにメリットファンクションの導関数を利用することが含まれます。
また、計算は変数レベルでマルチスレッド化されているため、それぞれの導関数は独自のスレッドで計算されます。
しかし、最適化を実行すると、予想とは異なる結果が得られます。
添付ファイル:
task_manager_1.gif [ 21.43 KiB | 表示回数: 741 回 ]
CPU は 1 つしか使用されていません (CPU 使用率が 13% ということは、マシン上の 8 個の CPU のうち 1 つしか使用されていないことを意味する)。
なぜでしょうか。
この問題は、マルチスレッド化の恩恵を受けるには簡単すぎるか、ZEMAX で非常に効率よく実装されているためマルチスレッド化する必要がなかったということです。
次に、単純なマクロを実行してみます。
! メリット関数の計算に要する時間
FORMAT 4.3 EXP
cycles = 100
TIMER # タイマーを設定
FOR i = 1, cycles, 1
dummy = MFCN() # メリット関数を更新
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 個の CPU で 310 マイクロ秒しかかかりませんでした。
この例でのメリットファンクションは、3 つの視野と 3 つの波長における RMS 波面エラーであることに注意してください。
これは、ZEMAX のガウス求積法と DLS のアルゴリズムが驚くほど効率的であることを示しています。
メリットファンクションがこれだけ高速に計算されるのであれば、全データのコピー、スレッドの起動、結果データの受け取りといったオーバーヘッドをあえて発生させる理由はありません。
DENC (Diffraction Encircled Energy) のオペランドがメリットファンクションに追加されると、CPU の使用率は 100% に近づきます。
添付ファイル:
task_manager_2.gif [ 22.7 KiB | 表示回数: 743 回 ]
通常、計算を分割する場合は、複数の CPU 上で分散して実行可能な並行タスク、およびシングル スレッドでのみ実行可能な連続したタスクに分割されます。
タスク マネージャに表示される CPU 使用率は、CPU のおおまかな使用状況を示すものであり、マルチスレッド タスクの実行中の CPU 使用率は 13% (シングル CPU の使用時) から 100% の範囲で変動します。