- cudamalloc(): 在GPU设备内存上分配内存。需要指定要分配的字节数。返回一个指向device内存的指针。
- malloc():标准的C库函数,在主机(CPU)内存上分配内存。需要指定要分配的字节数。返回一个指向host内存的指针。
- cudahostalloc(): 在主机(CPU)内存上分配页对齐的内存。需要指定要分配的字节数。返回一个指向host内存的指针。
- cudamallochost(): 等同于cudahostalloc()。在主机(CPU)内存上分配页对齐的内存。
主要区别:
- cudamalloc()在GPU上分配内存,其他几个函数在CPU上分配内存。
- cudamalloc()返回device指针,其他返回host指针。
- cudahostalloc()和cudamallochost()分配页对齐内存,malloc()没有这个要求。
- cudamalloc()用于GPU计算,其他用于数据拷贝或主机代码等。
总结:
- GPU计算使用cudamalloc()
- 数据拷贝用cudahostalloc()或cudamallochost()
- 主机代码用malloc()
示例:
1.cudamalloc()
float* d_a; // 定义device指针
cudamalloc(&d_a, size_in_bytes); // 分配GPU内存
参数:
- d_a: 输出参数,返回分配的device内存地址的指针
- size_in_bytes: 输入参数,指定要分配的内存大小(字节)
2. malloc()
float* h_a; // 定义host指针
h_a = (float*) malloc(size_in_bytes); // 分配CPU内存
参数:
- size_in_bytes: 输入参数,指定要分配的内存大小(字节)
- 返回分配的host内存地址的指针
3. cudahostalloc()
float* h_a;
cudahostalloc(&h_a, size_in_bytes, cudaHostAllocDefault); // 分配页面对齐host内存
参数:
- h_a: 输出参数,返回分配的host内存地址的指针
- size_in_bytes: 输入参数,指定要分配的内存大小(字节)
- flags: 输入参数,通常指定为cudaHostAllocDefault
4. cudamallochost()与cudahostalloc()用法相同,就不重复了。