没有什么是免费的。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可能会做得更好。