SCrypt Lookup Gap Отрицательный эффект

Я разрабатываю Litecoin Miner для процессора, который имеет только 32 КБ встроенной памяти. Поэтому я смотрел на алгоритмы SCrypt, и для Litecoin он использует N = 1024, что дает мне приблизительное использование памяти 2^10 * 1 * 128 = 128 КБ.

Поэтому я искал алгоритмы графического процессора, которые имеют параметр Lookup Gap. Для чтения я использую код кеплера от CudaMiner: https://github.com/cbuchner1/CudaMiner/blob/master/kepler_kernel.cu (строка 535)

Поэтому я понимаю, что разрыв в поиске - это компромисс между процессором и памятью. Чем оно выше, тем выше использование моего процессора и меньше память. То, что я не понял, как это работает точно.

В коде у меня есть

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

Это заставит его выглядеть блокнотом каждый байт LOOKUP_GAP (если его 2, то это будет 0,2,4,6,8,10), но где процессор использует больше алгоритма?

Моя реализация не будет сильно оптимизирована, это что-то вроде попытки запуска.

Я также видел реализацию FPGA, которая использует интерполяцию ( https://github.com/kramble/FPGA-Litecoin-Miner), для меня это более странно. Я не знаю, как они могли сделать интерполяцию значений в блокноте.

Спасибо!

1 ответ

Решение

Увеличение использования ЦП происходит, если вы не нажали предварительно рассчитанную запись. С LOOKUP 2 вы вычисляете 0-1023, но сохраняете только 0, 2, 4 и т. Д. Итак, если вам нужны данные для ввода блокнота 3, вы должны рассчитать их на лету, используя данные из 2. Это это дополнительный расчет против хранения их всех на постоянной основе. По мере увеличения разрыва в поиске количество вычислений на лету будет увеличиваться.

Другие вопросы по тегам