2

私はcudaを初めて使用します。3チャンネル(色)の2D画像(幅、高さ)があります。私が欲しいのは、このような3Dブロック2Dグリッドを持つカーネルを昼食することです

kernel_2D_3D<<<dim3(1,m,n), dim3(3,TILEy,TILEz)>>>(float *in, float *out)

色にはx、幅にはy、高さにはzを使用します。私の質問は次のとおりです。画像の行と列を計算するにはどうすればよいですか。

  1. unsigned int Row =?
  2. unsigned int Col =?

そして、私はこの関数を使用してグローバル一意インデックスを計算します

__device__ int getGlobalIdx_2D_3D()
{
    int blockId = blockIdx.x+ blockIdx.y * gridDim.x; 

    int Idx = blockId * (blockDim.x * blockDim.y * blockDim.z)
                 + (threadIdx.z * (blockDim.x * blockDim.y))
                 + (threadIdx.y * blockDim.x)
                 + threadIdx.x;

    return Idx;
}
4

1 に答える 1

1

幅にyを使用し、高さにzを使用している場合、画像の行と列はカーネル内で次のように計算されます。

unsigned int row = blockIdx.z * blockDim.z + threadIdx.z;
unsigned int col = blockIdx.y * blockDim.y + threadIdx.y;

現在のチャネルはに等しくなりthreadIdx.xます。

于 2013-01-31T17:48:30.433 に答える