为什么GPU在数值计算中比CPU更高性能?分支更糟?有人能给我一个详细的解释吗?GPU相对于CPU的性能
回答
GPU中的每个SM都是一个SIMD处理器,在SIMD的每个通道上执行不同的warp线程。一旦应用程序受到更多的计算限制(少量内存访问)并且没有分支应用程序实现GPU的峰值FLOPS。这是因为在分支之后,GPU掩盖了背离的一方,并首先执行另一方。两条路径都是连续执行的,留下一些SIMD通道不活动,从而导致性能下降。
我已经包括从Fung's paper一个有用的图,其是可公开获得的在所提到的参考,以显示性能实际上是如何下降:
图(a)示出在GPU的一个典型的分支发散翘曲内发生(4-此示例中的线程)。假设你以下内核代码:
A: // some computation
if(X){
B: // some computation
if(Y){
C: // some computation
}
else{
D: // some computation
}
E: // some computation
}else{
F: // some computation
}
G: // some computation
线程A处发散到B和F.如(b)所示的一些SIMD通道的是随时间滴下性能禁用。图(c)到(e)显示了硬件如何串行执行分支路径和管理分歧。欲了解更多信息,请参阅这本有用的论文,这是一个很好的起点
像计算有界的应用程序,如矩阵乘法或N体仿真很好地映射到GPU并返回非常高的性能。这是因为他们很好地占用了SIMD通道,遵循流模式,并且有一些内存访问。
不确定你在找什么。假设这是为了普遍理解为什么要这样做而不是其他方式。本文提供合理理解到您的问题(在外行而言):
https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU
简而言之:
甲CPU核心可以执行每时钟4的32位指令(使用 128通过AVX(256位)处理8位数据,而像 这样的GPU,Radeon HD 5970可以在每个时钟周期执行3200个32位指令(使用其3200个ALU或着色器)。这是800(或AVX情况下的400 )乘以每个时钟更多指令的差值。截至2011年,最快的CPU拥有多达6,8或12个内核,并且有一个更高的 频率时钟(2000-3000 MHz与Radeon HD 5970的725 MHz), ,但是一个HD5970仍然超过五个比2.3GHz的四个12核 处理器要快(这也将让你回到4700美元左右,而不是HD5970的 350美元)。
GPU是为特定任务而设计的,即渲染需要大量计算的3D图形。因此,某些应用程序像“大多数现代浏览器”一样将“数字处理”卸载到GPU上。而对于分支功能,任务由CPU保存(现在,谁知道他们将在后面做什么),因为CPU具有更好的“主控”功能。
- 1. iPhone/iPod touch CPU/GPU性能
- 2. CUDA功能相同的CPU和GPU
- 3. 常见算法的GPU与CPU性能
- 4. Intel HD GPU vs Intel CPU性能比较
- 5. TensorFlow:图形优化(GPU vs CPU性能)
- 6. CUDA - 相同的算法适用于CPU,但不适用于GPU
- 7. 相比CPU性能 - 继续
- 8. CPU和GPU相同的代码库
- 9. 相对于最大CPU频率的CPU/CPU进程/ CPU周期
- 10. 差异相对于性能
- 11. 现代FPGA相对于CPU和绝对(GFlops/GIops)的性能有多高?
- 12. Mesa3d CPU或GPU?
- 13. cpu vs gpu - CPU好时
- 14. 在GPU和CPU上添加2D阵列的性能
- 15. OpenCV GPU性能
- 16. 硬连线功能和GPU与CPU
- 17. 调用GPU内核后CPU性能下降
- 18. 使用javascript检测设备CPU/GPU性能?
- 19. Tensorflow:在GPU和CPU
- 20. MPI-2 CPU VS GPU
- 21. CPU和GPU与Theano
- 22. GPU + CPU Tensorflow训练
- 23. 基于CPU类型的JVM性能
- 24. GPU性能指标
- 25. 抛出错误'std :: bad_alloc',OpenCL对于CPU而不是GPU
- 26. TENSORFLOW机器上没有GPU,不能老是管理对CPU只
- 27. Cassandra CPU性能
- 28. CPU usage_slow性能
- 29. GPU的最佳性能
- 30. CUDA性能相对于每块
良好的环节和起点 – Stencil