MPI指令を使用して最適化ルーチンを並列化しようとしています。プログラムの構造は、本文の最後のブロック図におおよそ似ています。データは最適化ルーチンに送られ、Objective関数サブルーチンと別のサブルーチンが呼び出され、 "Jacobian"という行列が計算されます。最適化ルーチンは、Objective関数の最小値に達するのに必要な回数だけ反復し、結果で終了します。ヤコビ行列は、最小値がどの方向にあるかを決定し、その方向に一歩踏み出すために使用されます。私は最適化ルーチンを制御できません。目的関数とヤコビ行列を計算する関数のみを提供します。ほとんどの時間はヤコビ行列の計算に費やされます。ヤコビ行列の各行列要素は他の要素とは独立しているため、並列化のための良い候補と思われます。しかし、私はこれを達成することができませんでした。当初は、ヤコビ行列の計算を多数のノードにわたって分散することができると考えていました。各ノードは、行列要素の一部だけを計算します。私はそれをしましたが、たった1回の繰り返しの後、ノード上のすべてのスレッドが終了し、プログラムが停止します。私は、最適化ルーチンのソースコードがなければ、これは可能でないかもしれないと考え始めています。その理由は、コードを複数のノードに分散し、ヤコビ行列の一部を計算するように指示して、マスタを除いてすべてのノードで最適化を行うからです。 MPIを使用し、最適化ルーチンでコードに触れることなく、その周りに道がありますか?ヤコビ行列を計算する関数だけが、マスターを除くすべてのノードで実行できますか?あなたはどうしますか?MPIによる数値最適化
0
A
答えて
0
それは思ったよりも簡単になりました。この質問で説明したように、ワーカースレッドは1回の反復の後に終了していました。解決策は、ワーカーが実行したヤコビアンの計算でコードを無限のwhileループで囲むだけで、終了時にメインスレッド(マスター)からメッセージを送信することでそれを打ち破ることです。
関連する問題
- 1. R:最適化に関する質問 - 最適化で無効な関数値
- 2. コーディングによる最適化
- 3. UpdateTimestampsCacheによる最適化
- 4. フォールディングによる最適化
- 5. 数値ストリームの最適化例
- 6. SQL最適化最適化?
- 7. ローカル変数、最適化、およびARC
- 8. g ++最適化オプションがsin関数の値に影響する
- 9. O(sqrt(n))に完全な数値チェックを最適化する
- 10. lpSolve - 目的関数を特定の値に最適化する
- 11. 最適化で最適化されたプロファイリング関数
- 12. bytecodeによるPythonの最適化
- 13. Guiceによるレジストリ最適化
- 14. サブレンジタイプによるコンパイラの最適化
- 15. Numbaによるナンシー最適化
- 16. パフォーマンスの最適化によるコレクションコレクション
- 17. 最適化凹関数
- 18. `最適化()`:指数分布
- 19. データベースリレーショナル代数最適化
- 20. PHP関数の最適化
- 21. 最適化Ruby on Rails(数)
- 22. 複数のサブクエリ結合によるクエリの最適化
- 23. 関数ポインタによる呼び出しの最適化とインライン
- 24. 整数PuLPによる線形最適化
- 25. Mathematica:ブラックボックス関数の数値最適化時の評価順序
- 26. sqlテーブル値関数を最適化する
- 27. グローバル変数初期化の最適化
- 28. SQL行数の最適化になっ
- 29. Anylogicで変数を最適化する
- 30. 再帰関数を最適化する
あなたの目的関数の偏微分を記号的に取ってヤコビ行列を計算していますか?あなたの現在の推測で最適な入力ベクトルを評価しますか、現在の推測の周りの小さな偏差に対して目的関数を評価して数値的に計算しますか? ? – lockcmpxchg8b
@ lockcmpxchg8b Theresは目的関数の解析式ではないので、数値的に導関数を計算します。計算は時間がかかり、時間がかかるので、私はそれらを並列化しようとしています。 MPIは良い候補のように見えましたが、最適化ルーチンのソースコードにアクセスすることができないので、このケースではうまくいくとは思えません。おそらく私は自分のORを書く必要があります。 – Plamenk
@ハイパフォーマンスマークご提案いただきありがとうございます。そこに質問を投稿するかもしれませんが、パフォーマンス上ではなく、アルゴリズムに焦点が当てられているように見えます。 – Plamenk