2013-01-31 5 views
2

나는 cuda를 처음 사용했습니다. 나는 3 채널 (색상)의 2D 이미지 (너비, 높이)를 가지고 있습니다. 내가 원하는 무엇 내가 너비와 높이에 대한 Z에 대한 색상 X, Y를 사용 점심 3D 블록쿠다 인덱스 맵 3D 블록, 2D 그리드

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

같은 2D 그리드이 커널입니다. 내 질문 : 어떻게 이미지의 행과 열을 계산할 수 있습니다 :

  1. 부호없는 int Row =?
  2. 부호없는 정수 Col =?

및 I는 높이 폭 (Z)에 대해 Y를 사용하는 경우, 글로벌 고유 인덱스

__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; 
} 

답변

1

을 계산하기 위해이 함수를 사용하면, 그 영상의 행 및 열이 내부 같이 계산 될 커널 :

현재 채널은 threadIdx.x과 같습니다.

+0

좋아, 나는이 답변이 사실인지 아닌지를 확신 할 수 없다고 생각한다. 일부 독서 후에 나는 내 노트북에서 그것을 할 수 없다는 것을 발견했다. // CUDA를 지원하는 장치가 하나있다. // 장치 0 이름 : GeForce 9120M GS // 전산 능력 : 1.1 // 최대 전역 메모리 크기 : 536150016 // 최대 상수 메모리 크기 : 65536 // 블록 당 최대 공유 메모리 크기 : 16384 // 최대 블록 크기 : 512 x 512 x 64 // 최대 그리드 크기 : 65535 x 65535 x ** 1 ** // 워프 크기 : 32 – ALMIStack

+0

@ALMIStack ... 오해 때문에 죄송합니다. 나는 잘못된 가정을 제거했습니다. – sgarizvi

+1

그래서 grid.z = 1이고 ((n + TILEz-1)/TILEz) – ALMIStack