为什么CPU只有内存应该重要时计算速度慢于GPU?

时间:2018-02-07 17:01:14

标签: algorithm performance gpu

现代CPU具有1MH / s以下的ethash哈希值(源:https://ethereum.stackexchange.com/questions/2325/is-cpu-mining-even-worth-the-ether),而GPU容易超过20MH / s。凭借超频内存,它们的速率可达30MH / s。

GPU具有GDDR内存,时钟频率约为1000MHz,而DDR4则以更高的时钟速度运行。 DDR4的Bandwith似乎也更高(来源:http://www.corsair.com/en-eu/blog/2014/september/ddr3_vs_ddr4_synthetichttps://en.wikipedia.org/wiki/GDDR5_SDRAM

据说Dagger-Hashimoto / ethash带内存是重要的事情(也有超频GPU经验)我认为合理,因为CPU / GPU只需要做2x sha3(1x Keccak256 + 1x Keccak512)操作(来源:https://github.com/ethereum/wiki/wiki/Ethash#main-loop)。

现代Skylake处理器每秒可以计算超过100M的Keccak512操作(参见此处:https://www.cryptopp.com/benchmarks.html),因此GPU和CPU之间的核心数差异应该不是问题。

但是为什么我们不能通过2xKeccak操作和CPU上的内存加载来获得~50Mhash / s?

3 个答案:

答案 0 :(得分:2)

有关CPU和GPU编程之间差异的概述,请参阅http://www.nvidia.com/object/what-is-gpu-computing.html

简而言之,CPU具有非常少的内核,每个内核可以执行不同的操作,并且每个内核都可以处理非常复杂的逻辑。

GPU拥有数千个核心,几乎可以同步运行,但只能处理简单的逻辑。

因此,GPU的整体处理吞吐量可以大大提高。但是将逻辑从CPU转移到GPU并不容易。

如果你想深入深入并实际为两者编写代码,一个好的起点是https://devblogs.nvidia.com/gpu-computing-julia-programming-language/

答案 1 :(得分:2)

“现代Skylake处理器每秒可计算超过100M的Keccak512操作”是不正确的,它是140 MiB / s 。这是每秒的MiBs,并且散列操作超过1个字节,您需要将140 MiB / s除以被散列的字节数。

答案 2 :(得分:1)

我发现了一篇解决我的问题的文章(记忆对算法的影响)。

这不仅是计算问题(这里提到:https://stackoverflow.com/a/48687460/2298744)它也是可能会破坏CPU的Memorybandwidth。

如文章中所述,每一轮都会获取8kb的数据进行计算。这导致以下公式:

  

(内存带宽)/(每个哈希获取的DAG内存)=最大理论哈希值

     

(内存带宽)/(8kb / hash)=最大理论哈希值

对于像RX470这样的格拉夫卡,会导致:

  

(211千兆字节/秒)/(8千字节/哈希)=〜26M /秒

对于使用DDR4的CPU,这将导致:

  

(12.8GB /秒)/(8千字节/哈希)= ~1.6Mhashes / sec

或(取决于RAM的时钟速度)

  

(25.6GB /秒)/(8千字节/哈希)= ~3.2Mhashes /秒

总而言之,CPU或带DDR4内存的GPU无法获得超过3.2MHash / s的速度,因为无法获得足够快的数据进行处理。

来源:

https://www.vijaypradeep.com/blog/2017-04-28-ethereums-memory-hardness-explained/