关于Cuda 4.0和统一内存模型的问题

时间:2011-02-28 16:19:47

标签: sdk cuda gpu nvidia memory-model

Nvidia似乎在吹嘘Cuda 4.0允许程序员在CPU和GPU之间使用统一的内存模型。这不会取代在GPU和CPU中手动管理内存以获得最佳性能的需要,但是它是否允许更容易实现,可以进行测试,验证,然后进行优化(手动管理GPU和CPU内存)?我想听听评论或意见:)

3 个答案:

答案 0 :(得分:3)

嗯,这似乎是个大新闻!由NVIDIA自己的工程师构建的thrust库已经为您提供了一些风格。您可以通过仅仅 = 符号将数据从RAM移动到GPU的DRAM(无需调用cudaMalloc和cudaMemcpy等等)。因此推力使CUDA-C更像'只是C'。

将来可能会将它集成到CUDA-API中。请注意,在后台程序将是相同的(并将永远保持相同),但为程序员隐藏,以方便。 (我不喜欢那样)

编辑:CUDA 4.0已经公布,推力将与之整合。

答案 1 :(得分:3)

根据我的阅读,重要的区别在于,如果您有2个或更多GPU,您将能够在不触及主机RAM的情况下将内存从GPU1传输到GPU2。您还可以在主机上只有一个线程来控制2个GPU。

答案 2 :(得分:0)

“统一”内存仅指地址空间。主机和设备指针是从相同的64位地址空间分配的,因此任何给定的指针范围在整个过程中都是唯一的。因此,CUDA可以从指针推断指针范围“属于哪个”。

重要的是不要将地址空间与读/写指针范围的能力混淆。 CPU将无法取消引用设备内存指针。我相信在支持统一地址的平台上,默认情况下会映射所有主机分配,因此GPU将能够取消引用主机分配。

注意:Windows Vista / Windows 7上的默认驱动程序型号不支持此功能。