5

独立したタスクを実行する 2 つのカーネルを同時に起動することは可能ですか? たとえば、このCudaコードがある場合

// host and device initialization
.......
.......

// launch kernel1
myMethod1 <<<.... >>> (params);

// launch kernel2
myMethod2 <<<.....>>> (params);

これらのカーネルが独立していると仮定すると、それぞれにいくつかのグリッド/ブロックを割り当てて同時に起動する機能はありますか? CUDA/OpenCL にはこの規定がありますか。

4

3 に答える 3

6

複数の同時カーネル実行をサポートできるのは、CUDA 計算機能 2.0 以上 (つまり Fermi) を備えたデバイスのみです。CUDA 3.0 プログラミング ガイドのセクション 3.2.6.3 を参照してください。

計算機能 2.0 の一部のデバイスは、複数のカーネルを同時に実行できます。cudaGetDeviceProperties()アプリケーションは、プロパティを呼び出してチェックすることで、この機能を照会できます concurrentKernels

デバイスが同時に実行できるカーネル起動の最大数は 4 です。

ある CUDA コンテキストのカーネルは、別の CUDA コンテキストのカーネルと同時に実行できません。

多くのテクスチャまたは大量のローカル メモリを使用するカーネルは、他のカーネルと同時に実行される可能性が低くなります。

于 2010-06-14T10:27:11.367 に答える
6

並行カーネルには SM 2.0 以降が必要です。

同時実行を実現するには、2 つのカーネル間に依存関係がないことを手動で示す必要があります。これは、一方のカーネルが他方のカーネルで使用されているデータを変更しないことをコンパイラが判断できないためです。これは、同じバッファから読み書きすることによって行われる可能性があります。これは十分に単純に見えますが、内部にポインタが存在する可能性があるため、実際には検出がはるかに困難です。データ構造など。

独立性を表現するには、異なるストリームでカーネルを起動する必要があります。トリプル シェブロン構文の 4 番目のパラメーターは、ストリームを指定します。プログラミング ガイドまたは SDK の concurrentKernels サンプルを確認してください。

于 2010-06-17T10:29:14.677 に答える
3

CUDA 互換性 2.1 = 最大 16 の同時カーネル

于 2012-03-20T07:45:16.817 に答える