CUDA编程——核函数参数传递与GPU内存分配与调用

在程序中可以将CPU程序中的参数传递给核函数。

__global__ void add(int a,int b,int *c) {

    *c = a + b;

}

int main(void) {

    int c;

    int *dev_c;

    //在分配GPU的内存

    cudaMalloc((void**)&dev_c, sizeof(int));

    //调用核函数

    add <<<1, 1 >>> (2, 7, dev_c);

    //将GPU运算结果传递给主机

    cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);

    printf("2 + 7 = %d\n", c);

    //释放GPU指针内存

    cudaFree(dev_c);

    return 0;

}

    其中参数的传递是在核函数的尖括号后面,而且需要注意设备执行任何有用的操作都需要分配内存。其中cudaMalloc()是分配GPU中内存的函数,第一个参数是一个指针,用于保存新分配内存地址的变量,第二个参数是分配内存的大小。

    可以将cudMalloc()分配的指针传递给在设备上执行的函数。设备中的代码中使用cudaMalloc()分配的指针进行内存读/写操作。将cudaMalloc()分配的指针传递给主机上执行的函数。指针用完后,需要调用cudaFree()释放指针内存。cudaMemcpy()函数是访问设备内存的最常见的方法,其中cudaMemcpyToHost参数表明运行时源指针时一个设备指针,目标指针时一个主机指针,而cudaMemcpyHostToDevice表明与cudaMemcpyToHost相反的含义,还可以填写cudaMemcpyDeviceToDevice表明两个指针都位于设备上,如果源指针和目标指针都位于主机上,直接调用标准C的memcpy()函数。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容