私の標準では、いくつかの非常に大規模な計算を実行するコードを開発しています。シングル CPU の見積もりに基づくと、予想実行時間は ~10 CPU 年、メモリ要件は ~64 GB です。IO はほとんどまたはまったく必要ありません。問題のコードのシリアル バージョン (C で記述) は十分に機能しており、コードを最適に並列化する方法について考え始める必要があります。
ノードあたり最大 64 GB の RAM と 16 コアのクラスターにアクセスできます。私はおそらく <= 8 ノードの使用に制限します。単一ノードのスレッド間でメモリが共有され、異なるノードで個別のメモリが使用され、ノード間の通信が比較的少ないセットアップを想像しています。
これまで読んだことから、私が思いついた解決策は、OpenMP を使用して個々の計算ノードでスレッドを管理し、OpenMPI を使用してノード間で情報を渡す、ハイブリッド OpenMP + OpenMPI 設計を使用することです: https:/ /www.rc.colorado.edu/crcdocs/openmpi-openmp
私の質問は、これがこの並列化を実装するための「最良の」方法であるかどうかです。私は経験豊富な C プログラマーですが、並列プログラミングの経験は非常に限られています (OpenMP の経験は少しあり、OpenMPI の経験はありません。過去の私の仕事のほとんどは恥ずかしいほど並列でした)。別の提案として、OpenMPI を使用して単一のホストでメモリを効率的に共有することは可能ですか? もしそうなら、OpenMP の使用を避けることができます。これにより、物事が少し単純になります (2 つではなく 1 つの API)。