Nvidia 似乎在吹捧 Cuda 4.0 允许程序员在 CPU 和 GPU 之间使用统一的内存模型。这不会取代在 GPU 和 CPU 中手动管理内存以获得最佳性能的需要,但它是否允许更简单的实现,可以进行测试、验证和优化(手动管理 GPU 和 CPU 内存)?我想听听意见或意见:)
3 回答
嗯,这似乎是个大新闻!由 NVIDIA 自己的工程师构建的推力库已经给您带来了一些味道。您只需一个=符号就可以将数据从 RAM 移动到 GPU 的 DRAM (无需调用 cudaMalloc 和 cudaMemcpy 之类的东西)。因此推力使 CUDA-C 更像“只是 C”。
也许他们将来会将其集成到 CUDA-API 中。请注意,反手程序将是相同的(并且将永远保持相同),但为方便起见对程序员隐藏。(我不喜欢那样)
编辑:CUDA 4.0 已发布,推力将与其集成。
根据我的阅读,重要的区别在于,如果您有 2 个或更多 GPU,您将能够在不接触主机 RAM 的情况下将内存从 GPU1 传输到 GPU2。您还可以通过主机上的一个线程控制 2 个 GPU。
“统一”内存仅指地址空间。主机和设备指针是从相同的 64 位地址空间分配的,因此任何给定的指针范围在整个进程中都是唯一的。因此,CUDA 可以从指针推断指针范围“属于”哪个设备。
重要的是不要将地址空间与读取/写入这些指针范围的能力混淆。CPU 将无法取消引用设备内存指针。我相信在支持统一地址的平台上,默认情况下会映射所有主机分配,因此 GPU 将能够取消引用主机分配。
注意:Windows Vista/Windows 7 上的默认驱动程序型号不支持此功能。