2016-06-11 4 views
-4

에서 (for 루프) DCT를 병렬화하는 방법이내가 루프에 대한 중첩 된 네 내가 CUDA 코드 내 DCT 기능을 원하는이 DCT의 경우 CUDA <br> 에서 루프 네 개의 중첩 된 병렬화하는 방법 CUDA

for(y = 0; y < HEIGHT; y+=BLOCK_H) { 
for(x = 0; x < WIDTH; x+= BLOCK_W) { 
for(i = 0; i < BLOCK_H; i++) { 
for(j = 0; j < BLOCK_W; j++) { 
block_in[i][j] = cur_frame[(x+j)+(WIDTH*(y+i))]; 
} 
} 
} 
} 
+1

루프가 아닌 데이터를 생각하십시오. 그리고 튜토리얼을 읽으십시오. – Drop

+0

중첩 루프를 병렬 처리하는 방법에 대해 묻는 질문 [여기] (http://stackoverflow.com/questions/37708101/parallelize-four-and-more-nested-loops-with-cuda). [여기] (http://stackoverflow.com/questions/34529387/kernel-for-processing-a-4d-tensor-in-cuda) 또 하나. –

답변

2

Nvidia, Obukov 및 Kharlamov의 백서 : Discrete Cosine Transform for 8x8 Blocks with CUDACUDA samples에서 dct8x8과 함께 사용됩니다. 둘 다 살펴 봐야합니다.

+0

그 내용을 읽었지만 C에서이 줄을 어떻게 작성하는지 이해하지 못했습니다. Stroad + j , 1); –

+0

그리고 여기 Cuda int OffsThreadInRow = threadIdx.y * BLOCK_SIZE + threadIdx.x; int OffsThreadInCol = threadIdx.z * BLOCK_SIZE; src + = FMUL (blockIdx.y * KER2_BLOCK_HEIGHT + OffsThreadInCol, ImgStride) + blockIdx.x * KER2_BLOCK_WIDTH + OffsThreadInRow; dst + = FMUL (blockIdx.y * KER2_BLOCK_HEIGHT + OffsThreadInCol, ImgStride) + blockIdx.x * KER2_BLOCK_WIDTH + OffsThreadInRow; float * bl_ptr = 블록 + OffsThreadInCol * KER2_SMEMBLOCK_STRIDE + OffsThreadInRow; –