문제 :
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;
}
'Cuda' 카테고리의 다른 글
C++ Cuda 시스템 정보, GPU 정보 불러오기 (0) | 2021.05.31 |
---|---|
C++ Cuda CPU와 GPU에서의 연산 속도 비교하기 (0) | 2021.05.30 |
C++ Cuda 메모리 할당에서의 예외 처리 (0) | 2021.05.30 |
C++ Cuda GPU에서의 더하기 연산 (0) | 2021.05.30 |
C++ CUDA 문제 2. CPU에서 GPU로 데이터를 전달하여 3차원 공간에서 병렬 실행하기 (0) | 2021.05.30 |