2011-02-28 45 views
2

Nvidia似乎在嘲讽Cuda 4.0允许程序员在CPU和GPU之间使用统一的内存模型。这不会取代为了获得最佳性能而在GPU和CPU中手动管理内存的需求,但它是否允许更简单的实现方式进行测试,验证并优化(手动管理GPU和CPU内存)?我希望听到评论或意见:)有关Cuda 4.0和统一内存模型的问题

回答

3

从我读到的,最重要的区别是,如果你有2个或更多的GPU,你将能够将存储器从GPU1转移到GPU2而不需要接触主机RAM。您还可以在主机上仅使用一个线程来控制2个GPU。

3

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

也许他们会在将来将它集成到CUDA-API中。请注意,在后面的程序将是相同的(并且将永远保持相同),但对于程序员来说是非常容易的。 (我不喜欢)

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

+2

推力覆盖赋值运算符以在下面执行cudaMemcpy。如果不通过主存储器从一个GPU复制到另一个GPU - 换句话说,您必须执行两个副本才能将数据从一个GPU传送到另一个GPU。 CUDA 4.0消除了这个限制。 – 2011-03-05 21:06:06

+0

酷不知道,听起来很壮观:) – tim 2011-05-17 09:44:49

0

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

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

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