现代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_synthetic和https://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?
答案 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/