Nvidia似乎在吹捧Cuda 4.0允许程序员在CPU和GPU之间使用统一的内存模型。这不会取代在GPU和CPU中手动管理内存以获得最佳性能的需求,但它是否允许更容易的实现,这些实现可以经过测试、验证,然后进行优化(手动管理GPU和CPU内存)?我想听到一些评论或意见:)
发布于 2011-03-01 01:24:52
据我所知,重要的区别是,如果你有2个或更多的GPU2,你将能够在不接触主机内存的情况下将内存从GPU1转移到GPU2。你也可以用主机上的一个线程来控制2个GPU。
发布于 2011-03-01 01:05:29
嗯,这似乎是个大新闻!由NVIDIA自己的工程师构建的thrust库已经为您提供了一些经验。你可以仅仅通过一个=符号将数据从内存转移到图形处理器的内存中(不需要调用cudaMalloc和cudaMemcpy之类的东西)。所以thrust让CUDA-C更像是“just C”。
也许将来他们会把这个集成到CUDA-API中。请注意,在反手中,过程将是相同的(并且将永远保持相同),但为了方便起见,对程序员隐藏起来。(我不喜欢这样)
编辑: CUDA 4.0已经发布,推力将与之集成。
发布于 2011-05-01 22:57:52
“统一”内存仅指地址空间。主机和设备指针是从相同的64位地址空间分配的,因此任何给定的指针范围在整个进程中都是唯一的。因此,CUDA可以从指针推断出指针范围“属于”哪个设备。
重要的是,不要混淆地址空间和读/写这些指针范围的能力。CPU将无法取消对设备内存指针的引用。我相信在支持统一地址的平台上,所有主机分配都将默认映射,因此GPU将能够取消对主机分配的引用。
注: Windows Vista/Windows 7上的默认驱动程序型号不支持此功能。
https://stackoverflow.com/questions/5144558
复制相似问题