gpt4 book ai didi

OpenCL CPU 设备与 GPU 设备

转载 作者:行者123 更新时间:2023-12-04 00:03:38 25 4
gpt4 key购买 nike

考虑一个简单的例子:向量加法。

如果我为 CL_DEVICE_TYPE_GPU 构建一个程序,我为 CL_DEVICE_TYPE_CPU 构建相同的程序,它们之间有什么区别(除了“CPU 程序”在 CPU 上运行,而“GPU 程序”在 GPU 上运行)?

谢谢你的帮助。

最佳答案

设备类型之间存在一些差异。您的向量问题的简单答案是:将 gpu 用于大型向量,将 cpu 用于较小的工作负载。

1)内存复制。 GPU 依靠您正在处理的数据传递给它们,然后将结果读回主机。这是通过 PCI-e 完成的,对于 2.0/2.1 版本产生大约 5GB/s 的速度。 CPU 可以使用 CL_MEM_ALLOC_HOST_PTR 或 CL_MEM_USE_HOST_PTR 标志中的任何一个“就地”使用缓冲区 - 在 DDR3 中。见这里:clCreateBuffer .这是许多内核的一大瓶颈。

2) 时钟速度。 cpus 目前在时钟速度上远远领先于 gpus。大多数 cpu 的低端是 2Ghz,而如今大多数 gpus 的高端是 1Ghz。这是真正帮助 cpu 在小型工作负载中“胜过” gpu 的因素之一。

3)并发“线程”。高端 GPU 的计算单元通常比它们的 CPU 对手多。例如,6970 gpu (Cayman) 有 24 个 opencl 计算单元,每个单元又分为 16 个 SIMD 单元。大多数顶级桌面 cpu 有 8 核,而服务器 cpu 目前停止在 16 核。 (cpu 核心 1:1 映射到计算单元计数)opencl 中的计算单元是设备的一部分,它可以完成与设备其余部分不同的工作。

4) 线程类型。 gpus 具有 SIMD 架构,具有许多面向图形的指令。 cpus 有很多专门用于分支预测和一般计算的区域。一个 cpu 可能在每个内核中都有一个 SIMD 单元和/或浮点单元,但我上面提到的 Cayman 芯片有 1536 个单元,每个单元都可以使用 gpu 指令集。 AMD 称它们为流处理器,上面提到的每个 SIMD 单元中都有 4 个(24x16x4 = 1536)。除非制造商想要削减一些高速缓存或分支预测硬件,否则任何 CPU 都不会有那么多 sin(x) 或支持点积的单元。 GPU 的 SIMD 布局可能是大型向量加法情况的最大“胜利”。还可以做其他专门的功能是一个很大的好处。

5) 内存带宽。带 DDR3 的 CPU:~17GB/s。高端 GPU >100GB/s,200GB/s 以上的速度最近变得很普遍。如果您的算法不受 PCI-e 限制(参见 #1),则 gpu 在原始内存访问方面将超过 cpu。 gpu 中的调度单元可以通过仅运行不等待内存访问的任务来进一步隐藏内存延迟。 AMD 称之为波前,Nvidia 称之为扭曲。 cpus 有一个庞大而复杂的缓存系统,可以在程序重用数据的情况下帮助隐藏它们的内存访问时间。对于您的向量添加问题,您可能会受到 PCI-e 总线的更多限制,因为向量通常每个只使用一次或两次。

6) 电源效率。 gpu(使用得当)通常比 cpu 更节能。由于 cpu 在时钟速度方面占主导地位,因此真正降低功耗的唯一方法之一就是降低芯片的时钟频率。这显然会导致更长的计算时间。 Green 500 榜单上的许多顶级系统都采用 GPU 加速。见这里:green500.org

关于OpenCL CPU 设备与 GPU 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9205915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com