병렬기법
홈 > CUDA > 병렬기법 > CUDA기초 프로그램

CUDA기초 프로그램

CUDA 프로그래밍은 NVIDIA에서 제공하는 프로그래밍 가이드를 활용하시면 됩니다.

또한,  미루웨어는 NVIDIA와 공동으로 CUDA 프로그래밍 세미나를 진행하고 있습니다.

 

아래의 코드는 에러제어, memcpy, kernel launch가 모두포함되어 있는 코드입니다.

 

#include

 

void __global__ functionG(float *input, float *output);

void cudaError(const char *msg);

 

main(){

 

float *a_h;

float *b_dev, *c_dev;

float *a_h_new, *b_dev_new;

 

 

size_t memSize = sizeof(float)*10*2;

a_h = (float *)malloc(memSize);

cudaMalloc( (void**)&b_dev, memSize); cudaError("malloc b_d");

cudaMalloc( (void**)&c_dev, memSize); cudaError("malloc c_d");

 

cudaMemset( b_dev, 0., memSize); cudaError("memset c_d");

cudaMemset( c_dev, 0., memSize); cudaError("memset c_d");

 

for(int i=0; i<20; i++) a_h[i]= i + 0.01;

 

 

a_h_new   = &a_h  [1 * 5 -1 ];  //CPU pointer arithmetic

b_dev_new = &b_dev[2 * 5 -1 ];  //GPU pointer arithmetic

 

 

 

cudaMemcpy(b_dev_new, a_h_new, (memSize) - sizeof(float)*15 , cudaMemcpyHostToDevice);  cudaError("partial memcpy HTD");

 

for(int i=0; i<20; i++) a_h[i]= 0.;

// functionG<<<2,8>>>(b_dev, c_dev); cudaError("kernel");

 

cudaMemcpy(c_dev, b_dev, (memSize) , cudaMemcpyDeviceToDevice); cudaError("memcpy DTD");

cudaMemcpy(a_h, c_dev, (memSize) , cudaMemcpyDeviceToHost); cudaError("memcpy DTH");

 

 

for(int i=0; i<20; i++) printf(" %d %f \n", i, a_h[i]);

 

 

        return 0;

}

 

void __global__ functionG(float *input, float *output){

 

        int idx = blockIdx.x*blockDim.x + threadIdx.x;

}

 

void cudaError(const char *msg){

        cudaError_t err = cudaGetLastError();

        if(cudaSuccess !=err)

            printf("cudaErr(%d) in %s : %s \n", 

                     err, msg, cudaGetErrorString(err) );

}