4

次のプロパティを持つ NVIDIA GT650M を持っています。

( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
Maximum number of threads per multiprocessor:  2048

ストリーミング マルチプロセッサ (SM) と実際のマルチプロセッサとの間の混乱から抜け出しました。SM とマルチプロセッサは別物ですよね?たとえば、ビジュアル プロファイラーを使用して、1 スレッドの 1 ブロックで起動されたときに待機するだけで 370 ミリ秒続くダミー カーネルを取得しました。1 つの SM で 1024 スレッドの 4 ブロックで起動できますが、それでも 370 ミリ秒続きます。タスクはチップの 2 つのマルチプロセッサを使用し、それぞれが 2048 の同時スレッドを使用するため、これは正常です (5 ブロック x 1024 を使用するとすぐに、通常は 740ms かかります)。同様に、4 つの SM を使用して 1024 スレッドの 1 ブロックを 4 回同時に起動できますが、それでも 370 ミリ秒かかります。

質問の最初の部分は、SM とマルチプロセッサを混同しないようにするためのものですか? ここのような回答でも時々見られるように: CUDA - マルチプロセッサ、ワープ サイズ、およびブロックあたりの最大スレッド数: 正確な関係は何ですか? その結果、マルチプロセッサを介してタスクがスケジュールされる方法を明示的に制御することはできません。なぜなら (私の知る限り) ランタイム関数がそれを許可していないからです。では、2 つのマルチプロセッサとマルチプロセッサあたり 2048 スレッドのカード、またはそれぞれ 1024 スレッドの 4 つのマルチプロセッサを備えた別のカードがある場合、特定のプログラムは同じように実行されますか?

2 つ目は、どの用途に適しているか、コア数の少ないマルチプロセッサを増やすか、その逆かを知りたかったことです。これまでのところ、私の理解では、(マルチプロセッサーごとの特定の最大スレッドに対して) 少数のコアを持つより多くのマルチプロセッサーは、少数/単純な操作でより大規模な並列処理に適していると言えます。私がほとんど知らないこと)ロード/ストア操作と複雑な数学関数専用のALUが増えるため、スレッドごとにより多くの操作を必要とするカーネルにより適していますか?

4

1 に答える 1

5

これは用語の混乱のようです。

「SM」(SM = ストリーミング マルチプロセッサ) と「マルチプロセッサ」は同じものを指し、GPU の主要な実行ユニットであるハードウェア ユニットを指します。これらの用語は、特定のハードウェア リソースを指します。GPU が異なれば、SM の数も異なる場合があります。deviceQuery CUDAサンプル コードを使用して、特定の GPU の SM の数を確認できます。

cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, 0); // 0-th device
std::cout << deviceProp.multiProcessorCount;

「起動」にあるCUDAプログラムの要素はスレッドブロックです。グリッドは、カーネルの起動に関連付けられたすべてのスレッドブロックのコレクションです。個々のスレッドブロックは個々の SM で実行されます。どの GPU で実行しているかに関係なく、カーネルで多数のスレッドブロックを起動できます。スレッドブロックは、特定の GPU とその SM によって提供される速度で処理されます。

SM へのスレッドブロックのスケジューリングを直接制御する API 関数はありません。CUDA ストリームの優先順位を使用することで、同時に実行されているさまざまなカーネルからのスレッドブロックのスケジューリングをある程度間接的に制御できます。

于 2013-10-01T13:25:52.907 に答える