0

以前の投稿で説明したように: CUDAで利用可能な最大スレッド数を見つける方法は? GPUカードのスレッドの最大数は21504であることがわかりました。ただし、それ以上の数をカーネルに割り当てると、すべてがスムーズに実行されます。

#include <stdio.h>
#include <cuda_runtime.h>

__global__ void dummy()
{
}

int main()
{
    //int N=21504;
    int N=21504*40;
    dummy<<<1,N>>>();
    return 0;
}

何が起こったのかはわかりませんが、これは避けたほうがいいと思います。

4

1 に答える 1

3

あなたの例は正しく実行されませんでした。カーネルの起動後に CUDA エラー ステータスを確認しなかったため、正しく実行されているように見えただけです。

あなたの他の質問に対して私が行ったコメントは、ここにも当てはまります。

マルチプロセッサあたりのスレッドの最大数は、同時に「実行中」のスレッド数の上限です。他の制限要因により、通常はさらに数が制限されます。この値は、同時に起動できるスレッドの数には影響せず、最適なパフォーマンスに必要なスレッドの数を調べるのにはあまり役立ちません。

お使いのカードはコンピューティング機能 2.0 デバイスです。Features and Technical Specificationsデバイスの制限の詳細については、CUDA プログラミング ガイドのセクションを参照してください。特に、お使いのデバイスは、X、Y、Z の各次元で 65535 のグリッド サイズに制限されています。X = 21504*40、Y = 1、Z = 1 のグリッド サイズで起動しようとしました。

お使いのデバイスは、ブロックあたり 1024 スレッドに制限されています。したがって、理論的には、最大 65535 * 65535 * 65535 ブロックまで、それぞれが 1024 スレッドで同時に起動できます。

デバイスがサポートする常駐スレッドの最大数よりも多くのスレッドでカーネルを起動しても、パフォーマンスが低下することはありません。

于 2012-09-24T20:26:14.700 に答える