2016-06-29 39 views

回答

3

CPU和GPU具有相同的存储系统。也就是说,系统DRAM内存也是GPU全局内存分配的物理内存。各种技术(如零拷贝和统一内存)大多可以消除系统内存数据和GPU全局数据之间的逻辑差异。此外,Tegra TX1中的GPU与所有支持CUDA的GPU一样,都具有CUDA共享内存。这是在特定块中的线程之间共享的内存,但它不在GPU中的不同块之间共享。如前所述,GPU中不同模块之间共享的主存储器系统是全局存储器系统,Tegra TX1与系统DRAM存储器在物理上相同。

+2

所以基本上在编写cuda程序时,我不必担心cudamalloc,cudamemcpy和cudafree语句。 –

+0

不正确。主机和设备内存之间仍有*逻辑*区别。如果您愿意,可以使用诸如零拷贝或统一内存之类的技术来解决或模糊这些区别。 –

+0

所以我有一个非常基本的问题。假设我正在编写一个cuda程序来对CPU存储器中的数组中存在的一些数字进行平方。我们编写CPU和GPU内存不同的cuda代码的方式基本上是将整个阵列从主机内存复制到设备内存中,然后执行所需的计算。我的问题是:在Tegra TX1的情况下,如果我们遵循这个程序,是否会在DRAM上创建数据的重复? –

0

如果您已经使用cudamalloc()分配了内存块,则是。它在CPU和GPU之间自动共享Global-Memory

请不要将它与名为“Shared MEM”的CUDA 本地内存混淆。 {在相同块的线程之间共享}。

记住:“共享存储空间”在CUDA是TURBO高速可编程缓存 GPU的SM单元内! :-)