我正在为只有 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),这对我来说更奇怪。我不知道他们如何对暂存器中的值进行插值。
谢谢!