Это предложение для реализации в Monero следующего алгоритма PoW. Перед прочтением рекомендуется прочитать обсуждение по ссылке. Случайное целочисленное математическое изменение Деление и извлечение квадратного корня заменяются последовательностью случайных целочисленных инструкций: В программе может быть от 60 до 69 инструкций, обычно около 63. Есть 9 регистров с именами от R0 до R8. Регистры R0-R3 являются переменными, регистры R4-R8 являются постоянными и могут использоваться только в качестве исходного регистра в каждой инструкции. Регистры R4-R8 инициализируются на каждой итерации основного цикла значениями из основных регистров. Все регистры являются 32-битными для обеспечения эффективной реализации графического процессора. Хотя регистры можно сделать 64-битными (это поддерживается в майнерах версии ниже). Случайная последовательность меняет каждый блок. Высота блока используется в качестве начального числа для генератора случайных чисел. Это позволяет майнерам на CPU и GPU предварительно скомпилировать оптимизированный код для каждого блока. Он также позволяет сверять оптимизированный код для всех будущих блоков с эталонной реализацией, поэтому он будет гарантированно безопасен для использования в демоне Monero кошелька. Пример сгенерированной случайности: https://github.com/SChernykh/CryptonightR/blob/master/CryptonightR/random_math.inl Оптимизированный CPU-майнер: xmrig Оптимизированные GPU майнеры: xmrig-amd xmrig-NVIDIA Программное обеспечение для пула: node-multi-hashing node-cryptonight-hashing Проектирование Набор инструкций берется из тех, которые эффективны на процессорах (или видеокартах) по сравнению с ASIC: все они, кроме XOR, являются сложными операциями на уровне логической схемы и требуют задержки O (logN). Эти операции были хорошо изучены на протяжении десятилетий, поэтому современные процессоры/видеокарты уже имеют их хорошую реализацию. SUB и XOR никогда не выполняются с одинаковыми операндами, предотвращая снижение до нуля. ADD определяется как трехсторонняя операция со случайной 32-битной константой для фиксации конечных нулевых битов, которые имеют свойство накапливаться после умножения. Генератор кода гарантирует, что минимальная требуемая задержка для ASIC при генерации случайных чисел по меньшей мере в 2,5 раза выше, чем была необходима для DIV + SQRT в Cryptonight v2: текущие настройки обеспечивают задержку, эквивалентную цепочке из 15 умножений, в то время как оптимальная реализация ASIC для DIV + SQRT имеет задержку как у цепочки из 6 умножений. Он также учитывает суперскалярные и неисправные процессоры, которые могут выполнять более 1 инструкции за такт. Если ASIC реализует случайную математическую схему как простой конвейер для упорядочения, то это приведет к дальнейшему замедлению в полтора раза. Для предотвращения оптимизации сгенерированного кода реализован ряд простых проверок. Текущее сочетание команд также помогает предотвратить алгебраическую оптимизацию кода. Мои тесты показывают, что сгенерированный код на C ++, скомпилированный со всеми оптимизациями, в среднем на 5% быстрее, чем прямой перевод на машинный код x86. Это по результатам синтетического теста со случайными числами в цикле. Производительность на CPU/GPU и на ASIC Как выбирались параметры CryptonightR: имеет такой же хэшрейт, что и Cryptonight v2 на CPU/GPU меньшее энергопотребление на CPU/GPU Фактические цифры (хэшрейт и энергопотребление для разных процессоров и графических процессоров) доступны здесь . Для ASIC придется реализовать несколько простых и минималистичных инструкций декодера и конвейера выполнения. Но это невозможно, гораздо сложнее создать эффективный конвейер вне очереди, который может отслеживать все зависимости данных и выполнять более одной инструкции за один цикл. Он также должен использовать фиксированную тактовую частоту, как у процессора. Поэтому XOR (одиночный логический элемент) не будет работать существенно быстрее. ASIC с внешней памятью будет иметь ту же производительность, что и на Cryptonight v2, но для реализации нескольких конвейеров выполнения, похожих на CPU, потребуется гораздо больше физического места для микросхем. ASIC с встроенной памятью будет работать в 2.5-3.75 раза медленнее из-за увеличения математической задержки. Источник: Cryptonight variant 4 aka CryptonightR Перевод: hen (@hhhpro) Редактирование: Agent LvM (@LvMi4) Коррекция: Kukima (@Kukima)