[CUDA] Hello World

Computer/GPGPU 2013. 10. 9. 22:23
반응형

다음은 CUDA를 이용하여 GPU(이하 Device)에서 Hello World 문자를 설정하고 이를 CPU(이하 Host)에서 출력하는 프로그램 예제이다.


#include <stdio.h>

/* 1) */
__global__ void cudahelloworld(char *c){
        int i=0;
        char *cudahello="hello world";
        for(i=0;i<11;i++) *c++=*cudahello++;
}
int main(void){
        char *host_text;
        char *device_text;
        host_text=(char*)malloc(12);
        memset(host_text,0x00,12);

        /* 2) */
        cudaMalloc((void**)&device_text,11);

        /* 3) */
        cudahelloworld<<<1,1>>>(device_text);

        /* 4) */
        cudaMemcpy(host_text,device_text,11,cudaMemcpyDeviceToHost);
        printf("from gpu:%s\n",host_text);

        /* 5) */
        cudaFree(device_text);
}


1) 에서 __global__ 수식어구는 이 함수가 Device에서 동작하도록 컴파일되어야 한다는 것을 알려주는 것이다.


2) 는 Device의 메모리를 할당하는 함수이다. 다음과 같이 이용 가능하다.



 이때 Host의 Pointer 변수가 Device의 Pointer로 사용되는데 이 Pointer는 Device에서 실행되는 함수에 전달 가능하며 Device에서 실행되는 함수에서 읽기 쓰기가 가능하다. Host에서 실행되는 함수에서는 이 포인터를 이용하여 읽거나 쓰는 것은 불가능하다.


3) Device의 함수를 호출하는 수식어구이다. 의미는 <<<X,Y>>> 에서 X는 병렬 실행할 커널 복사본의 개수이다. Y는 하나의 블록안에 실행할 스레드의 개수이다.


4) 는 memory를 copy하는 함수로 다음과 같이 이용가능하다.



이때 cudaMemcpyKind 값을 넘겨주는데 이 값은 다음과 같이 정의된다.



5) 는 Device에 할당된 메모리를 해제하는 함수이다.



반응형
Posted by alias
,