3

我正在为只有 32KB 内部存储器的处理器开发莱特币矿工。所以我在研究 SCrypt 算法,而对于 Litecoin,它使用 N = 1024,这给了我 2^10 * 1 * 128 = 128KB 的内存使用近似值。

所以我正在研究具有参数 Lookup Gap 的 GPU 算法。为了阅读,我正在使用 CudaMiner 的开普勒代码: https ://github.com/cbuchner1/CudaMiner/blob/master/kepler_kernel.cu (第 535 行)

所以我知道查找差距是 CPU 和内存之间的权衡。它越高,我的 CPU 使用率越高,内存越低。我不明白它是如何工作的。

在我的代码中

int pos = c_N_1/LOOKUP_GAP, loop = 1 + (c_N_1-pos*LOOKUP_GAP);

这将使它看起来每个 LOOKUP_GAP 字节的暂存器(如果它是 2,它将是 0、2、4、6、8、10),但是算法的 CPU 使用率在哪里?

我的实现不会被高度优化,类似于try to run

我还看到了一个使用插值的 FPGA 实现(https://github.com/kramble/FPGA-Litecoin-Miner),这对我来说更奇怪。我不知道他们如何对暂存器中的值进行插值。

谢谢!

4

1 回答 1

2

如果您没有点击预先计算的条目,则会增加 CPU 使用率。使用 LOOKUP 2,您正在计算 0-1023,但仅存储 0、2、4 等……因此,如果您需要便笺簿条目 3 的数据,则必须使用 2 中的数据即时计算它。这与将它们全部永久存储相比,这是一个额外的计算。随着查找间隙的增加,您将进行的动态计算量也会增加。

于 2014-01-26T16:47:00.183 回答