理解CUDAグリッド寸法、ブロック寸法及びスレッド機構(簡単な説明)[閉鎖]

StackOverflow https://stackoverflow.com/questions/2392250

  •  25-09-2019
  •  | 
  •  

質問

整理スレッドはGPUで実行される方法?

役に立ちましたか?

解決

ハードウェア

GPUデバイスがある場合は、例えば、4つのマルチプロセッシング・ユニットは、彼らは768件のスレッドごとに実行することができます:あなたはより多くのスレッドを計画している場合これ以上の768 * 4以上のスレッドが実際に(並行して実行される所定の瞬間に、彼ら)自分の順番を待っているされます。

ソフトウェア

のスレッドはブロックに編成されています。ブロックは、マルチプロセッシングユニットによって実行されます。 ブロックのスレッドがINDENTIFIEDすることができる(インデックス付け)1Dimension(X)を用いて、2Dimensions(X、Y)または3Dimインデックス(X、Y、Z)が、いずれの場合にX Y Z <= 768当社例えば(他の制限は、X、Y、Zに適用され、ガイドとあなたのデバイス機能を参照してください)。

あなたがより多くのものより4つの* 768のスレッドが必要な場合は、

もちろん、あなたが4つ以上のブロックを必要としています。 ブロックは、1D、2D又は3Dを索引付けすることができます。入るのを待っているブロックのキューがあります GPUは(なぜなら、私たちの例では、GPUは4つのマルチプロセッサを持っており、唯一の4つのブロックがあります )が同時に実行されます。

次に簡単な場合:処理512×512画像

私たちは一つのスレッドが一つの画素(i、j)を処理したいとします。

私たちは、64個のスレッドそれぞれのブロックを使用することができます。その後、我々は512 * 64分の512 = 4096個のブロックを必要とします (SO = 4096 * 64 512×512のスレッドを持っている)

これは、2次元ブロック内のスレッドがblockDim = X 8 8(ブロックあたり64スレッド)を有する(容易画像を索引付けするために)編成するのが一般的です。私はそれをthreadsPerBlock呼び出すことを好むます。

dim3 threadsPerBlock(8, 8);  // 64 threads

と2D gridDim = 64×64ブロック(4096個のブロックが必要)。私はnumBlocksそれを呼び出すことを好むます。

dim3 numBlocks(imageWidth/threadsPerBlock.x,  /* for instance 512/8 = 64*/
              imageHeight/threadsPerBlock.y); 

カーネルは次のように起動されます:

myKernel <<<numBlocks,threadsPerBlock>>>( /* params for the kernel function */ );       

最後に:。ブロックは、その64件のスレッドが実行を取得するためにGPUのマルチプロセッサのいずれかを割り当てられるのを待っている「4096個のブロックのキュー」、のようなものがあるでしょう。

カーネルスレッドによって処理される画素(i、j)は、このように算出されます

uint i = (blockIdx.x * blockDim.x) + threadIdx.x;
uint j = (blockIdx.y * blockDim.y) + threadIdx.y;

他のヒント

9800GT GPUをするとします。 14のマルチプロセッサは、各々が8 threadprocessorsを有しwarpsize 32スレッドまでの各threadprocessorハンドルを意味し32です。 14 * 8 * 32 = 3584がactuall cuncurrentスレッドの最大数である。

あなたは以上の3584個のスレッドでこのカーネルを実行した場合(4000個のスレッドを言うと、あなたはブロックとグリッドを定義する方法、それは重要ではないのGPUが同じようにそれらを扱います。):

func1();
__syncthreads();
func2();
__syncthreads();
次のように

次に、これら2つの関数の実行順序は次のとおり

1.func1第3584スレッドに対して実行される

2.func2第3584スレッドに対して実行される

3.func1は、残りのスレッドのために実行される

4.func2は、残りのスレッドのために実行される

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top