私は、計算能力 1.3 の 240 個のプロセッサ コアを含む Tesla C1060 に取り組んでいます。各 8 コアが 1 つのマルチプロセッサによって制御され、スレッドの各ブロックが 1 つのマルチプロセッサに割り当てられていることがわかっているので、30 ブロックのグリッドを起動すると、1 つのマルチプロセッサと同じ実行時間がかかるはずです。ブロック。ただし、物事はそれほどうまくスケーリングされず、ブロックごとに 8 スレッドであっても、この素晴らしいスケーリングを得ることはできませんでした。1 ブロックあたり 512 スレッドという別の極端な例では、グリッドに最大 5 ブロックが含まれる場合、1 ブロックとほぼ同じ時間が得られます。これは、8 コア CPU マシンで MPI を使用して並列化された同じタスクを実装した場合のパフォーマンスを比較したときに残念でした。誰かが私にそれを説明できますか?
ところで、コンピューターには実際にこのテスラ カードが 2 つ含まれているため、それらの間でブロックが自動的に分散されますか? それとも、両方が完全に利用されるようにするために、さらに手順を踏む必要がありますか?
編集: 最後の質問に関して、同じコンピューターで 2 つの独立した MPI プロセスを起動した場合、それぞれを別のグラフィックス カードで動作させるにはどうすればよいですか?
EDIT2: Pedro の要求に基づいて、1 に正規化された垂直アクセスの合計時間と並列ブロックの数を示すプロットを次に示します。スレッド数/ブロック = 512 です。ブロック数が多い場合、時間のばらつきが非常に大きいことがわかったため、数値は概算です。