我正在为只有32kb内部内存的处理器开发莱特币矿工。因此,我正在看Scrypt算法,对于Litecoin,它使用n = 1024,这给了我2^10 * 1 * 128 = 128KB内存使用Aproximate。
所以我正在研究具有参数查找差距的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);
这将使它看起来像刮擦pad每个lookup_gap byte(如果它的2个字节,它将为0,2,4,6,8,10),但是算法的CPU使用量更多?
我的实现不会高度优化,就像尝试运行一样。
我还看到了使用插值的FPGA实现(https://github.com/kramble/fpga-litecoin-miner),这对我来说更奇怪。我不知道他们如何在scratchpad中对值进行插值。
谢谢!
如果您没有达到预定的条目,则增加的CPU使用情况会出现。使用查找2,您是在计算0-1023,但仅存储0、2、4等...因此,如果您需要使用从2的数据进行Scratch-Pad条目3的数据进行即时计算。是一个额外的计算,而不是让它们全部存储。随着查找差距的增加,您将要进行的飞行计算的量将增加。