【问题标题】:Why is the CPU slower for calculations then the GPU when only Memory should matter?当只有内存很重要时,为什么 CPU 的计算速度比 GPU 慢?
【发布时间】:2018-07-18 01:43:05
【问题描述】:

现代 CPU 的 ethash 哈希率低于 1MH/s(来源:https://ethereum.stackexchange.com/questions/2325/is-cpu-mining-even-worth-the-ether),而 GPU 可以轻松地以超过 20MH/s 的速度进行挖掘。借助超频内存,它们的速率最高可达 30MH/s。

GPU 具有时钟频率约为 1000MHz 的 GDDR 内存,而 DDR4 以更高的时钟速度运行。 DDR4 的带宽似乎也更高(来源: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?

【问题讨论】:

  • 一个 GPU 有更多的处理器内核。
  • 我知道这一点,但该算法并不依赖于我所理解的处理性能,因为那里只有 2 个 sha3 调用,现代处理器能够处理比 1M 次/秒快得多的速度
  • 不,这不是重复的,我知道 GPU 有更多的内核。该算法旨在使其成为内存瓶颈,但我没有找到任何为什么内存是瓶颈

标签: algorithm performance gpu


【解决方案1】:

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

这不仅是计算问题(这里提到:https://stackoverflow.com/a/48687460/2298744),还有内存带宽问题,它会成为 CPU 的瓶颈。

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

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

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

对于像提到的 RX470 这样的显卡,这会导致:

(211 GB/秒)/(8 千字节/哈希)= ~26Mhashes/秒

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

(12.8GB / 秒) / (8 KB / 哈希) = ~1.6Mhashes/秒

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

(25.6GB / 秒)/(8 KB / 哈希)= ~3.2Mhashes/秒

总而言之,具有 DDR4 内存的 CPU 或 GPU 无法获得超过 3.2MHash/s 的速度,因为它无法以足够快的速度获得处理所需的数据。

来源:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

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

    简而言之,一个 CPU 的核心数量非常少,每个核心可以做不同的事情,每个核心都可以处理非常复杂的逻辑。

    GPU 有数千个内核,它们几乎同步运行,但只能处理简单的逻辑。

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 2019-04-18
      • 2015-12-27
      • 2016-10-23
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2020-10-29
      • 2022-01-19
      相关资源
      最近更新 更多