研究関連の質問が少しあります。
現在、MPIに基づく(特にopenmpi 6.3を使用した)構造スケルトンフレーム作業の実装を終了しました。フレームワークは単一のマシンで使用されることになっています。今、私はそれを他の以前のスケルトン実装(スカンジウム、ファストフローなど)と比較しています。
私が気づいたことの1つは、私の実装のパフォーマンスが他の実装ほど良くないということです。これは、私の実装がMPI(つまり、送信操作と受信操作の一致を必要とする両面通信)に基づいているのに対し、比較している他の実装は共有メモリに基づいているためだと思います。(...しかし、それを推論するための良い説明はまだありません、そしてそれは私の質問の一部です)
2つのカテゴリーの完了時間には大きな違いがあります。
今日は、ここで共有メモリのopen-mpiの構成についても紹介します=> openmpi-sm
そして、私の質問が来ます。
まず、共有メモリ用にMPIを構成するとはどういう意味ですか?つまり、MPIプロセスは独自の仮想メモリに存在します。次のコマンドのフラグは実際にはどのようなものですか?(MPIでは、すべての通信は明示的にメッセージを渡すことによるものであり、プロセス間でメモリは共有されないと思いました)。
shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
2つ目は、共有メモリ用に開発された他のスケルトン実装と比較して、MPIのパフォーマンスが非常に悪いのはなぜですか?少なくとも、1台のマルチコアマシンでも実行しています。(他の実装がスレッド並列プログラミングを使用したためだと思いますが、説得力のある説明はありません)。
どんな提案やさらなる議論も大歓迎です。
質問をさらに明確にする必要がある場合は、お知らせください。
お時間をいただきありがとうございます!