私のプログラムには 2 つのカーネルがあり、各カーネルに対して 256 スレッドのブロックを 2 つだけ起動します。
kernel1<<<2,256>>>()
kernel2<<<2,256>>>()
4 つの SMX グラフィック カードでは、プログラムの現在の実行はそのようなものです (ビジュアル プロファイラーでプロファイリングする場合、両方のカーネルが次々に実行されます)。
SMX1 SMX2
---------
| K1 | K1 |
| K1 | K1 |
-----------
| | |
| | |
---------
SMX3 SMX4
SMX1 SMX2
---------
| K2 | K2 |
| K2 | K2 |
-----------
| | |
| | |
---------
SMX3 SMX4
同じプログラム内で同時に両方のカーネルを起動し、そのように見えて実行時間を 2 で割ることが可能かどうか疑問に思っていました:
SMX1 SMX2
---------
| K1 | K1 |
| K1 | K1 |
-----------
| K2 | K2 |
| K2 | K2 |
---------
SMX3 SMX4
kepler 3.5 : kepler アーキテクチャの新しい "Hyper-Q" 機能により、複数の MPI プロセスから複数のカーネルを同時に起動できます。(または他のプロセス)