考虑一个简单的例子:向量加法。
如果我为CL_DEVICE_TYPE_GPU构建一个程序,并且我为CL_DEVICE_TYPE_CPU构建了相同的程序,它们之间有什么区别(除了"CPU程序“在CPU上运行,而"GPU程序”在GPU上运行)?
谢谢你的帮助。
发布于 2012-02-09 19:34:58
设备类型之间存在一些差异。向量问题的简单答案是:使用gpu处理大的向量,使用cpu处理较小的工作负载。
1)内存复制。GPU依赖于您正在处理的数据传递到GPU中,然后将结果读回主机。这是通过PCI-e完成的,对于2.0 / 2.1版,它的速度约为5 5GB/s。CPU可以使用CL_MEM_ALLOC_HOST_PTR或CL_MEM_USE_HOST_PTR标志“就地”使用缓冲区(在DDR3中)。请看这里:clCreateBuffer。这是许多内核的最大瓶颈之一。
2)时钟速度。cpus目前在时钟速度上大大领先于gpus。大多数cpus的低端是2 1Ghz,而现在大多数gpus的高端是1 1Ghz。对于小型工作负载,这是真正帮助cpu“赢得”gpu的一个因素。
3)并发“线程”。高端cpu通常比cpu拥有更多的计算单元。例如,6970 gpu (开曼)具有24个opencl计算单元,每个计算单元被划分为16个SIMD单元。大多数顶级桌面cpus都有8个核心,而服务器cpus目前只有16个核心。(cpu核心映射1:1到计算单元计数) opencl中的计算单元是设备的一部分,它可以执行与设备其余部分不同的工作。
4)线程类型。gpus具有SIMD架构,具有许多面向图形的指令。cpus有大量的区域专门用于分支预测和常规计算。cpu可以在每个核心中具有SIMD单元和/或浮点单元,但是我上面提到的开曼芯片具有1536个单元,其中gpu指令集可用于每个单元。AMD称它们为流处理器,上面提到的每个SIMD单元中都有4个(24x16x4 = 1536)。没有cpu会有那么多的sin(x)或支持点积的单元,除非制造商想要去掉一些高速缓存或分支预测硬件。gpus的SIMD布局可能是大向量加法情况下最大的“赢家”。做其他专门的功能是一个很大的奖励。
5)内存带宽。具有DDR3的cpus:~17 of /s。高端gpus >100 of/s,速度超过200 of/s最近变得普遍。如果您的算法不受PCI-e限制(参见#1),则gpu在原始内存访问中的速度将超过cpu。gpu中的调度单元可以通过只运行不等待内存访问的任务来进一步隐藏内存延迟。AMD称其为波前,Nvidia称其为翘曲。cpus有一个庞大而复杂的缓存系统,在程序重用数据的情况下帮助隐藏它们的内存访问时间。对于向量添加问题,您可能会受到PCI-e总线的更多限制,因为每个向量通常只使用一到两次。
6)电源效率。gpu (使用得当)通常比cpu更有电效率。由于cpus在时钟速度上占主导地位,因此真正降低功耗的唯一方法之一是降低芯片的时钟频率。这显然会导致更长的计算时间。绿色500榜单上的许多顶级系统都有大量的gpu加速。查看此处:green500.org
https://stackoverflow.com/questions/9205915
复制相似问题