cudaMalloc()分配的指针有使用限制,设备指针的使用限制总结如下:
1.可以将其传递给在设备上执行的函数
2.可以在设备代码中使用其进行内存的读写操作
3.可以将其传递给在主机上执行的函数
4.不能在主机代码中使用其进行内存的读写操作
总的来说就是主机指针只能访问主机代码中的内存,设备指针只能访问设备代码中的内存
这是两个数相加的cuda代码:
#include<iostream>
using namespace std;__global__ void add(int a,int b,int *c)
{ *c=a+b;}int main(void)
{ int c; int *dev_c; cudaError_t error; error=cudaMalloc((void**)&dev_c,sizeof(int)); if(error!= cudaSuccess) { cout<<"cudaMalloc d_A returned error"<<cudaGetErrorString(error)<<"code:"<<error<<" line"<<__LINE__<<endl; exit(EXIT_FAILURE); } add<<<1,1>>>(2,7,dev_c); error=cudaMemcpy(&c,dev_c,sizeof(int),cudaMemcpyDeviceToHost); if(error!= cudaSuccess) { cout<<"cudaMemcpy returned error:"<<cudaGetErrorString(error)<<" code:"<<error<<" line:"<<__LINE__<<endl; exit(EXIT_FAILURE); } cout<<"2+7="<<c<<endl; cudaFree(dev_c); return 0;}