ログイン    検索  

掲示板トップ » はじめてのZEMAX » よくある質問




新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
 記事の件名: マルチCPUでのZEMAXの実行
 投稿記事 Posted: 2009年10月20日(火) 09:24 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<はじめに>

近年のコンピュータの技術革新は光学設計の進歩を後押ししてきました。コンピュータの技術革新により、より複雑で高度な計算を行うことを可能にし、さらにより迅速に結果を導きだすことを可能にしています。

効率よくプログラムを実行するためには使っているハード・環境を最大限に利用する必要があります。ZEMAXでは光線追跡、解析、最適化、公差解析など全ての演算処理において最高16 CPUの完全マルチスレッド化を実現しており、CPUの搭載数に比例した速度で結果を迅速に導き出します。また2009年10月12日バージョンより64ビット版ZEMAXが利用可能になり、パソコンの全てのメモリ・リソースを必要の際にアドレス可能になりました。高い演算処理能力が求められる機能およびマルチCPUをお使いの方には特に64ビットのプラットフォームで利用可能なより大容量のメモリが有益です。

光線追跡、回折解析、最適化などの大規模な計算は、スレッドと呼ばれる複数の並行タスクへと自動的に分割されます。
たとえば、[Geometric Bitmap Image Analysis] 機能について考えてみましょう (この機能の詳細については、ZEMAX社HPの英語版ナレッジベーストピック「How to Produce Photo-Realistic Output Images」を参照)。http://www.zemax.com/kb/articles/118/1/How-to-Produce-Photo-Realistic-Output-Images/Page1.html 
この機能では、次のような .jpg または .bmp のビットマップ画像を受け取り、
添付ファイル:
original.jpg
original.jpg [ 67.82 KiB | 表示回数: 762 回 ]


各ピクセルからの光線が、光学系を通して検出器に到達するまで追跡します。
処理能力の低い結像系では、次のような画像が表示されます。
添付ファイル:
ray_trace.jpg
ray_trace.jpg [ 78.29 KiB | 表示回数: 760 回 ]


シングル CPU のコンピュータでは、ZEMAX はすべての光線の追跡をピクセル 1 から開始し、次にピクセル 2 に移動して同じ処理を行い、すべてのピクセルの追跡が完了するまでこれを繰り返します。
4 個のプロセッサが搭載されたコンピュータでは、このタスクは次のように分割できます。
添付ファイル:
Strip.jpg
Strip.jpg [ 72.74 KiB | 表示回数: 761 回 ]


この場合、シングル CPU の場合と比較すると計算速度が 4 倍になります。
ただし、画像分割、スレッドの起動、スレッドが戻るときのスレッド データの受け取り、データの単一画像へのつなぎ合わせでわずかなオーバーヘッドが発生します。
どんなに良いソフトウェア エンジニアリングによってもこのオーバーヘッドを最小限に抑えることができますが、完全になくすことはできません。


トップへ 
   
 
 記事の件名: マルチCPUでのZEMAXの実行
 投稿記事 Posted: 2009年10月20日(火) 09:32 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<ZEMAX のアーキテクチャ>

ZEMAX は、最初からマルチスレッド アプリケーションとして作成されました。
これは、メイン メニュー ウィンドウなど、ZEMAX のすべてのウィンドウは個別のスレッドであることを意味します。
ZEMAX-SE および EE は完全にマルチスレッド化されており、利用可能なすべての CPU を使用します。
その際に、追加の費用やライセンスは不要です。

この文脈でのスレッドとは、特定の計算を実行するのに必要なデータのパッケージを意味します。
アプリケーションによって生成されるスレッドと、コンピュータ上の利用可能な CPU にそれらのスレッドを割り当てる処理 (オペレーティング システムによって処理される) の違いを区別することが重要です。

ZEMAX 内のすべてのウィンドウは個別のスレッドであるため、あるウィンドウで更新処理を行っている最中に別のウィンドウで設定を編集するといった操作が可能です。
添付ファイル:
updates.jpg
updates.jpg [ 74.18 KiB | 表示回数: 72 回 ]


この例では、FFT MTF ウィンドウで再計算を行っていますが、それとは別に、像面湾曲プロットの設定にアクセスして更新することができます。
解析機能の計算の終了を待たなくても、ZEMAX の他の機能を開始したり、変更することができるのです。

コンピュータに搭載されている CPU が 1 つの場合でも、高度なマルチスレッド コードを記述することによって実行が非常に効率的になるという利点があります。
コンピュータに複数の CPU が搭載されていると、各スレッドを個別の CPU 上で実行できるため、その利点はさらに大きくなります。
さらには、ZEMAX の多くの解析ウィンドウおよびツールには固有のマルチスレッド対応機能が備わっており、複数の CPU への分散が自動的に処理されます。
[Geometric Bitmap Image Analysis] はそのような機能の 1 つですが、以降のページでは他の機能についても説明します。
そして何よりも優れている点は、コンピュータ上での複数の CPU の利用をユーザーがまったく意識する必要がないということです。
ZEMAX とオペレーティング システムはネゴシエーションを行うことによって、使用する最適なスレッド レベルを決定します。


トップへ 
   
 
 記事の件名: マルチCPUでのZEMAXの実行
 投稿記事 Posted: 2009年10月20日(火) 09:37 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<8 CPU マシンでの ZEMAX の実行>

ZEMAX社で仕様している8 個の Xeon CPU を搭載した Dell 690 ワークステーションのデバイスマネージャは以下の通りです。
添付ファイル:
Dev_mgr.gif
Dev_mgr.gif [ 25.17 KiB | 表示回数: 753 回 ]


これらは、ハイパースレッド処理プロセッサではなく本物の CPU です。
ハイパースレッド処理とは、空いている CPU サイクルを集めて、もう 1 つのプロセッサのように見せかけるテクノロジのことです。ハイパースレッド処理ではいくらかのパフォーマンス向上は見込めますが、本物の CPU を搭載するのとは比較になりません。

このマシンには 8 GB の RAM が搭載されており、64 ビットの Windows XP を実行しています。
ZEMAX には組み込みのパフォーマンス テスト機能が備わっており、[Tools] > [Miscellaneous] > [Performance Test] を選択することで実行できます。
[Performance Test] では、現在のコンピュータ ハードウェアとレンズの組み合わせで実行可能な 1 秒あたり何本の光線が面に当たるか(RSS)を計測し、および 1 秒あたりのシステム更新の数のチェックが実行されます。
1 秒あたりの光線-面のパフォーマンス数値は、現在の光学系を通過する多数のランダムなスキュー光線を追跡し、追跡された光線数と面数の積を所要時間 (秒) で除算することによって測定します。
これは、「光線追跡速度」の最も適切な測定項目です。

1 秒あたりのシステム更新は、多数のシステム更新を実行した後、実行されたシステム更新の数を所要時間 (秒) で除算することによって計算されます。
システム更新には、瞳位置の再計算、視野データ (光線の照準座標など)、レンズの口径、屈折率、ソルブ、および光線追跡の前に実行する必要のあるその他の基本的なレンズ チェックがあります。

この速度は、システム プロセッサ、クロック速度、レンズの複雑さによって大きく異なります。
特に理由はないのですが、ZEMAX Development Corporation では、ZEMAX に同梱されているDouble Gauss サンプル ファイル ({ZEMAXroot}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx を参照) を、個々のマシンのパフォーマンス比較用のテスト ファイルとして使用しています。
8 CPU マシンと 2007 年 7 月 25 日付けの ZEMAX I を使用すると、次の結果が得られました。
添付ファイル:
perf_test.gif
perf_test.gif [ 6.14 KiB | 表示回数: 751 回 ]


1 秒あたりの光線-面の数は 9,300 万個を超えています。
これは驚異的な光線追跡速度です。
さらに、計算実行で使用される CPU 数に応じて、直線的な上昇を示しています。
添付ファイル:
speed_test.gif
speed_test.gif [ 5.13 KiB | 表示回数: 750 回 ]


トップへ 
   
 
 記事の件名: マルチCPUでのZEMAXの実行
 投稿記事 Posted: 2009年10月20日(火) 09:41 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<すべての機能でマルチ プロセッサが利用されるか>

ZEMAX の各機能は個別のスレッドで実行され、他のすべての機能から独立しています。
ただし、すべての機能が内部的にマルチスレッド化されているわけではありません。
スレッドの起動と管理、スレッド完了時のデータの受け取り、結果を再度つなぎ合わせる処理には必ずオーバーヘッドが発生します。

また、各スレッドはすべてのレンズ データの完全なコピーを持つ必要があります。
すべての機能で複数の内部スレッドが生成されると、メモリー使用量が急激に上昇します。

そのかわりにZEMAXでは、計算負荷の高い機能が内部的にマルチスレッド化されます。
これには、最適化、グローバル最適化、公差解析、ホイヘンス計算、回折計算、物理光学、ノンシーケンシャル光線追跡が含まれます (ただし、これらに限られません)。
また、多くの個別解析機能が内部的にマルチスレッド化されています。
ZEMAX では、実行タスクがマシンのリソースを最適に使用できるようにマルチスレッド機能が管理されます。

たとえば、波面のデフォルトメリットファンクションを使用して、Double Gauss サンプル ファイルを最適化してみましょう。
半径 (無限半径の表面を除く) および厚さをすべて可変にします。
最後の半径に f/# ソルブを配置し、それを f/3 に設定します。
次に、デフォルトメリットファンクションを次のように設定します。
添付ファイル:
merit%20function.gif
merit%20function.gif [ 11.4 KiB | 表示回数: 741 回 ]


次にこれを最適化するために、ZEMAXは搭載されているCPU数を自動検知しますので、8 個の CPU をすべて使用するように指定します。
添付ファイル:
optimization.gif
optimization.gif [ 8.55 KiB | 表示回数: 744 回 ]


DLS (Damped Least Squares) の最適化には、変数ごとにメリットファンクションの導関数を利用することが含まれます。
また、計算は変数レベルでマルチスレッド化されているため、それぞれの導関数は独自のスレッドで計算されます。
しかし、最適化を実行すると、予想とは異なる結果が得られます。
添付ファイル:
task_manager_1.gif
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
task_manager_2.gif [ 22.7 KiB | 表示回数: 743 回 ]


通常、計算を分割する場合は、複数の CPU 上で分散して実行可能な並行タスク、およびシングル スレッドでのみ実行可能な連続したタスクに分割されます。
タスク マネージャに表示される CPU 使用率は、CPU のおおまかな使用状況を示すものであり、マルチスレッド タスクの実行中の CPU 使用率は 13% (シングル CPU の使用時) から 100% の範囲で変動します。


トップへ 
   
 
 記事の件名: マルチCPUでのZEMAXの実行
 投稿記事 Posted: 2009年10月20日(火) 09:42 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<まとめ>

ZEMAX は、コンピュータ内の全 CPU を、ユーザーの操作なしで利用できるように設計されています。
すべての計算において、起動するスレッドの最適数が自動的に決定されます。


トップへ 
   
 
期間内表示:  ソート  
 
新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 

掲示板トップ » はじめてのZEMAX » よくある質問


 
トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
cron