现在,如果我使用此代码尝试通过在 GeForce GTX460SE (CC2.1) 中使用 CUDA5.5 从 CPU 内核访问 GPU-RAM,那么我会收到异常“访问冲突”:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
int main()
{
unsigned char* gpu_ptr = NULL;
cudaMalloc((void **)&gpu_ptr, 1024*1024);
*gpu_ptr = 1;
int q; std::cin >> q;
return 0;
}
但是我们知道,有UVA(统一虚拟寻址)。还有一些新的:
- 2013 年 10 月 25 日 - 331.17 Beta Linux GPU 驱动程序:新的 NVIDIA 统一内核内存模块是一个新的内核模块,用于统一内存功能,将在即将发布的 NVIDIA CUDA 中公开。新模块是 nvidia-uvm.ko,它将允许 GPU 和系统 RAM 之间的统一内存空间。http://www.phoronix.com/scan.php?page=news_item&px=MTQ5NDc
- CUDA 6 的主要特性包括: 统一内存——通过使应用程序能够访问 CPU 和 GPU 内存而无需手动将数据从一个内存复制到另一个,从而简化了编程,并且可以更轻松地在广泛的范围内添加对 GPU 加速的支持编程语言。http://www.techpowerup.com/194505/nvidia-dramatically-simplifies-parallel-programming-with-cuda-6.html
是否可以通过使用新 CUDA6 中的简单指针从 CPU 内核访问内存 GPU-RAM?