こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、Zemaxコミュニティで気になった、シーケンシャルモードでの最適化中にCPUがフル活用されていない、というトピックを取り上げます。
Zemaxコミュニティについては、こちらのページ で概略を説明しています。
結論
- 最適化中にCPUの使用率が低く見えても、OpticStudioの動作やユーザの設定に問題があるのではなく、OpticStudioがその状態が最適であると判断して調整しています。
- OpticStudioの仕様として、最適化処理中にCPUの使用率が100%の時もあれば、数%まで低下することもあります。
このページの使い方
このページでは、Zemaxコミュニティに投稿されたトピック中から、よく参照されているもの、コメントが多いもの、筆者が気になったものを取り上げて紹介します。よくある疑問や注目されているトピックについての情報を発信することで、何かしらの気づきとなれば幸いです。
シーケンシャルモードの最適化でCPUがフル活用されていない
トピックへのリンク:
最適化が終わるのを待つ時間はもどかしいもので、どんな結果になるのか、少しでも早く結果が確認したくなります。その時間、OpticStudioがちゃんと働いているか、タスクマネージャでCPUの使用率を調べたことがある人もいると思います。
上で取り上げた二つのフォーラム投稿は、そんな光学エンジニアからのよくある質問として、ZemaxのエンジニアがFAQとして投稿したトピックになります。
CPUがフル活用される ≠ 最も早い計算
OpticStudioの解析機能や最適化、公差解析といった各機能は、「必要に応じて」マルチスレッディングを行います。マルチスレッディングとは、1つの処理を複数のパーツに分割して、それらを別々に計算したのち、最終的にはそれらを足し合わせることで処理を完了する手法のことです。
OpticStudioは自動的に使用するCPUのコア数を選択します。その処理は私たちユーザは制御することはできず、またその状況を知ることもできません。OpticStudioのマルチスレッディングは、OpticStudioがベストだと判断した数で実行されます。
どのように計算を分割するかはOpticStudioの根幹をなす部分なので、私たちユーザにできるのは、まず現状は「OpticStudioが最適だと思って頑張っている」と理解することと、いま自分たちで計算時間短縮できる方法を探すことです。
最適化中の複数コアの割り当て方 (筆者の想像を含みます)
DLS (Damped Least Square, 減衰最小二乗法)を使用しているとき、光学系に設定した変数の数だけマルチスレッディングが行われます。例えば、変数が3つ設定されている場合、計算の分割数は3です。ひとつひとつの変数を変えたとき、光線追跡の変化を別々のコアを使用して計算している、というイメージでしょうか。
最適化中、常にすべてのCPUが使用されるとは限りません。その理由は、メリットファンクションを評価するときは、複数のコアに分散させた計算結果を一つに合流させる必要があるためです。コア数を増やしても思うように計算時間が短縮されない現象は、アムダールの法則として光ラーニングでもたびたび登場しています。GPUとマルチコアCPU_Zemaxコミュニティ注目トピック (2) を参照してください。
メリットファンクションの組み方
複数コアに計算を振り分ける場合は、並列計算以外に必要な処理、いわゆるオーバーヘッドが発生します。メリットファンクションがシンプルで計算が容易な場合、コア数が1か、数個が最速の設定になります。
メリットファンクションの組み方の他の要因として、OPGTやOPGLといった、それ以前のオペランドの計算結果を参照して出力する必要があるオペランドは、マルチスレッディングの恩恵を律速する場合があります。
最新バージョン方が早い、はず
OpticStudioのリリース情報を追いかけていると、最適化のスピード改善に関する項目が見られます。それが実感として感じられるかは、光学系の設定やメリットファンクションの組み方によって変わります。ただ、Zemaxの開発チームを信じるならば、最適化は新しいバージョンになるほど早いはずです。
最適化のスピード改善 ≠ より良い最適解の発見
”最適化のスピード”は、あくまでメリットファンクションの計算時間(各オペランドの計算時間を含める)を短縮することです。バージョンアップに伴う最適化のスピード改善は、最適化時にスレッドを立ち上げるコアを何個使用するかを決定するアルゴリズムの改善です。
つまり、メリットファンクションと変数の組み方で決定される解空間の形状は変わらないので、得られるローカル解は同じです。この議論は、OpticStudioに新しく追加された最適化アルゴリズムの時にも少し触れました。解空間とローカル解は動かず、そのローカル解に早く(使用するコア数の最適化)、迷うことなく停止する(新しいアルゴリズム)ように改善されています。
最適化は下山?DLSとOD_Zemaxコミュニティ注目トピック (10) や 新最適化アルゴリズムDLSXとPSD_Zemaxコミュニティ注目トピック (9) を参照してください。「ローカル解A以外の、よりよいローカル解Bを見つける」を志向したものでないのが注意点でしょうか。
まとめ
このページでは、Zemaxコミュニティに投稿された「シーケンシャルモードの最適化でCPUがフル活用されていない」を取り上げました。 コア数は多ければ良いという単純な話ではなく、少ない方が結果速い場合もあれば、シングルコアで計算する場合も存在します。ほとんどの情報は、トピックに書いてある内容の翻訳になっています!
また、コア数やCPU使用率はOpticStudioが自動制御するので、私たちユーザは手が出せません。あまり気にせず、メリットファンクションの組み方や変数の設定方法など、解空間を効率的に定義することに注力するのが良いと思いました。早いオペランド、遅いオペランド、早いメリットファンクションの組み方などをある程度把握できているといいのかもしれません。
コメント