본문 바로가기

Cuda

C++ Cuda 문제 1. Thread index, Block Index, Grid Index 출력하기

문제 :

 

Grid가 X,Y,Z 방향으로 4차원의 쓰레드를 가지고 있으며, Grid 안의 Block은 X,Y,Z 방향으로 각각 2차원의 쓰레드를 가지고 있다.

이 경우에 threadIdx, blockIdx, gridDim을 출력하는 프로그램을 작성하시오

 

정답 : 

 

#include "cuda_runtime.h"

#include "device_launch_parameters.h"

#include <stdio.h>

__global__ void print_Idx_Dim()

{

    printf("threadIdx.x : %d, threadIdx.y : %d, threadIdx.z : %d\n", threadIdx.x, threadIdx.y, threadIdx.z);

    printf("blockIdx.x : %d, blockIdx.y : %d, blockIdx.z : %d\n", blockIdx.x, blockIdx.y, blockIdx.z);

    printf("gridDim.x : %d, gridDim.y: %d, gridDim.z: %d\n", gridDim.x, gridDim.y, gridDim.z);

}

int main()

{

    unsigned int blockDim[3] = { 2,2,2 };

    unsigned int gridDim[3] = { 4,4,4 };

    dim3 block(blockDim[0], blockDim[1], blockDim[2]);

    dim3 grid(gridDim[0], gridDim[1], gridDim[2]);

    print_Idx_Dim << <grid, block >> > (); // 각 grid를 활용한 병렬 처리

    cudaDeviceSynchronize(); // 모든 쓰레드가 끝나기를 기다린다

    cudaDeviceReset(); // Cuda device를 초기화한다.

 

return 0;

}