如果我们有GPGPU,为什么还要使用SIMD?


13

我认为这个问题最好在Stack Exchange的CS部分中解决。既然我们已经拥有使用CUDA和OpenCL等语言的GPGPU,那么多媒体SIMD扩展(SSE / AVX / NEON)是否仍然可以满足目的?

最近,我阅读了一篇有关SSE指令如何用于加速分类网络的文章。我以为这很整洁,但是当我告诉我的首席教授时,他笑了,并说在GPU上运行类似的代码会破坏SIMD版本。我毫不怀疑,因为SSE非常简单,GPU是大型的高度复杂的加速器,具有更多的并行性,但是让我思考的是,在许多情况下,多媒体SIMD扩展比使用GPU更有用吗?

如果GPGPU使SIMD冗余,为什么英特尔会增加对SIMD的支持?SSE是128位,现在是AVX的256位,明年将是512位。如果GPGPU可以更好地处理具有数据并行性的代码,为什么英特尔要推出这些SIMD扩展?他们可能能够将等效资源(研究和区域)放入更大的缓存和分支预测器中,从而提高串行性能。

为什么使用SIMD代替GPGPU?


2
向GPU提供足够的数据以使其保持繁忙本身就是一个挑战。主机与设备之间的数据传输实际上始终是瓶颈。在CPU上更好地支持某些操作(例如,无进位乘法;请参阅PCLMULQDQ)。
Juho 2014年

2
@Juho像AMD的APU这样的新设备难道没有将GPU和CPU放在同一个芯片上吗?这是否消除了瓶颈?
jonfrazen 2014年

1
说完所有内容后,向量指令仍然是单个指令,调度和执行它的成本与任何其他单个指令相同。只有在收益大于成本时才在GPU上运行作业才有意义。还要考虑到每个内核有一个SIMD单元,但每个机箱通常只有一个GPU,而GPU目前是共享资源。这限制了您可以在GPU上运行的作业数量。(内核的数量一直在增加,而GPU的数量却没有。)
别名2014年

英特尔在GPU方面的工作不多(除了Larrabee / Knights Landing :),所以我想他们自然而然地尝试推AVX。尽管大量使用AVX可能会非常有效,但现在会导致较新的CPU降频,因此它们可能会达到极限。
nsandersen

Answers:


16

没有什么是免费的。GPGPU SIMD。GPGPU上的SIMD指令往往比CPU上的SIMD指令宽。GPGPU通常是细粒度的多线程(并且硬件上下文比CPU多得多)。GPGPU针对进行了优化。他们倾向于将较大百分比的面积分配给浮点单元,将较小百分比的区域分配给缓存,而将较小百分比的区域分配给整数性能。

让我们做一个比较。英特尔的核心i7-5960x具有8个内核,每个内核具有4宽(双精度)SIMD,运行于3 GHz(3.5 GHz Turbo),20M L3缓存,消耗356mm ^ 2和140W,成本 1000 美元。因此8 * 4 * 3 * 4 = 384个双精度GFlops。(额外的4倍是因为您每个周期每个向量通道可以进行两次融合乘加。)它可以执行768个单精度GFlop。大约是1.08 DP GFlops / mm ^ 2和2.75 DP GFlops / Watt。片上缓存大约还有57.5 KB / mm ^ 2。

NVidia的GeForce GTX Titan Black有15个SMX,每个SMX具有32宽双精度SIMD,运行于890MHz(980MHz涡轮),3.5M的L1 + L2缓存,消耗561mm ^ 2,250W,成本 1000 美元。因此15 * 32 * .89 * 4 = 1709双精度GFlops。(每个循环每个向量通道两个融合乘积的乘积是相同的4倍。)它可以执行5126个单精度GFlop。大约是3.05 DP GFlops / mm ^ 2和6.8 DP GFlops / Watt。因此,单位面积上DP浮点密度的3倍,DP浮点功率效率的3倍。权衡?6.4 KB / mm ^ 2的片上缓存。密度比CPU低大约9倍。

因此,主要区别在于GPU选择的区域平衡非常倾向于浮点数(尤其是单精度浮点数)而不是缓存。即使忽略了需要在CPU和GPU之间来回复制内容以进行I / O的事实,GPU与CPU相比将做得如何也取决于运行的程序。

如果您的数据并行浮点程序的控制差异很小(所有矢量通道同时执行相同的操作),并且您的程序正在流式传输(无法从缓存中受益),那么GPU将与每单位面积或每瓦效率高3倍。但是,如果您要执行大量的分散控制,执行非数据并行工作,或者可以从大量的读取多次数据结构中受益,则CPU可能会做得更好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.