CUDA入门学习笔记:四 设备内存的申请,拷贝及释放
一、内存申请
函数如下:
cudaError_t cudaMalloc(void **address, size_t size);
返回值是CUDA的error类型。
第一个参数是待分配设备内存的指针,传入的是双重指针。
第二个参数是申请的内存大小。
例子:
float *d_m;
int n = sizeof(float);
cudaError_t d_error = cudaMalloc((void **)&d_m, n);
二、内存拷贝
函数如下:
cudaError_t cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind);
返回值是CUDA的error类型。
第一个参数是目标地址。
第二个参数是源地址。
第三个参数是复制数据的字节数。
第四个参数是数据传递的方向。该枚举类型有五个选项可选:
enum __device_builtin__ cudaMemcpyKind
{
cudaMemcpyHostToHost = 0, /*主机到主机*/
cudaMemcpyHostToDevice = 1, /*主机到设备*/
cudaMemcpyDeviceToHost = 2, /*设备到主机*/
cudaMemcpyDeviceToDevice = 3, /*设备到设备*/
cudaMemcpyDefault = 4 /*自动判断*/
};
例子:
float f_m[3] = {1.1, 2.2, 3.3};
float *d_m;
int n = sizeof(float)*3;
cudaError_t d_error = cudaMalloc((void **)&d_m, n);
d_error = cudaMemcpy(d_m, f_m, n, cudaMemcpyHostToDevice);
三、内存释放
函数如下:
cudaError_t cudaFree(void *address);
返回值是CUDA的error类型。
第一个参数是设备指针。
例子:
float *d_m;
int n = sizeof(float);
cudaError_t d_error = cudaMalloc((void **)&d_m, n);
d_error = cudaFree(d_m);