3.2 CUDA程序的基本框架:
cuda runtime api: docs.nvidia.com/cuda/cuda-runtime-api。
关于cudaMalloc函数:https://www.cnblogs.com/thkkk/p/14949014.html
从引用的角度去理解这个函数更好理解。
可以简化地写为
double *d_x;
cudaError_t cudaMalloc(&d_x, M);
cudaError_t cudaFree(void* address);
host函数也可以用new()和delete()申请、释放内存。但一定要注意一一对应,否则可能编译不报错但运行有错误。
感觉是很重要的经验,但目前还没有遇到,先记下。
关于第四个参数:
grid_size的定义:
注意,一定要在代码中增加一个判断语句,当前线程小于N时才执行,否则不执行。
不然就会越界访问设备内存。
3.3 设备函数
一些标识符:
__global__: 核函数,主机调用,设备执行。
__device__: 只能被核函数和其他设备函数调用,设备中执行。返回值可以自由定义,double等。
__host__: 主机端普通的C++函数,主机调用,主机执行,可省略。
这个不知道什么情况,先放在这。
核函数只能是核函数,要在主机上调用,device上运行,因此不能用__global__和__host__来修饰。