CUDA 6.0以后,出现了:统一内存,unified memory,其具有以下特性:
1 其声明有以下两种方式:
a 使用关键字managed,可选的和device,一起使用,比如:device managed int ret[1000];
b 使用函数cudaMallocManaged():
int *ret;
cudaMallocManaged(&ret,1000*sizeof(int));
cudaFree(ret);
2 使用上面两种方式声明的内存,能够被cpu和gpu同时访问,不需要显式的在cpu和gpu之间使用cudaMemcpy()在cpu和gpu之间进行内存传输
3 cuda的managed内存和其zero-copy memory之间的区别在于:
a zero-copy分配的是CPU中的固定页内存(pinned memory in cpu system ),这种方式下,根据从哪里索引这个内存,其速度将更快或者更慢,零复制内存
实际上是一种特殊形式的内存映射,它允许你将主机内存直接映射到GPU内存空间上。
b 统一内存,将内存与执行空间分开,这样所有的数据访问都很快