Аннотация

Умножение без переносов — основная вычислительная операция в стеке доказательств над бинарным полем. При запуске узел выбирает реализацию для x86-64 или ARM64, при этом представление поля, структура свидетеля и сериализованное доказательство остаются неизменными. На эталонном ноутбуке реализация AVX2+VPCLMUL ускорила пакетное хеширование Poseidon2b в 5,4 раза и сократила время измеренного доказательства с областью из 2^24 позиций с 34,9 до 18,9 секунды.

Почему ядра двоичного поля определяют производительность

Механизм доказательств ParanO(1)d работает над бинарным полем расширения GF(2128), содержащим 2128 элементов. Poseidon2b — криптографическая перестановка, используемая стеком доказательств и хешем proof of work, — реализована над тем же полем. Сложение в этом поле — операция XOR, а умножение — полиномиальное умножение без переносов с последующей редукцией. Поэтому основным примитивом, определяющим пропускную способность доказывающей и проверяющей сторон, а также хеширования proof of work, становится аппаратное умножение без переносов, а не обычное целочисленное умножение.

Архитектурное требование было строже простого ускорения на производительной машине. Форма доказательств, раскладка свидетеля и байты транскрипта должны оставаться одинаковыми на всех платформах. Реализация для конкретной архитектуры набора команд (ISA) вправе менять способ вычисления, но не доказываемое утверждение.

Одна раскладка, выбор реализации во время запуска

ПлатформаБазовый уровеньВекторная реализацияПараллелизм
x86-64SSE4.1 + PCLMULQDQAVX2 + VPCLMULQDQДва упакованных элемента поля
x86-64AVX-512 + VPCLMULQDQЧетыре параллельных канала арифметики и более широкие пакеты
ARM64NEON + PMULLПакетное ядро в регистровом представленииОдин элемент поля на 128-битный вектор

Релизный исполняемый файл при запуске определяет возможности процессора и выбирает наиболее широкую из поддерживаемых реализаций. Логический упакованный тип при этом остаётся неизменным. AVX-512 обрабатывает соседние логические пакеты, а не переопределяет их смысл, поэтому его включение не может изменить сериализацию доказательства или свидетеля.

Poseidon2b остаётся в регистрах

Даже наивная векторная реализация теряет время, если каждый раунд перемещает данные между скалярным представлением в памяти и векторными регистрами. Ядро в регистровом представлении удерживает четырёхкомпонентное состояние перестановки в векторах на всём расписании. Возведение в квадрат использует специализированный путь двоичного поля, умножение — VPCLMULQDQ или PMULL, а константы раундов и линейные слои применяются без выхода из выбранного представления.

Реализация AVX2+VPCLMULQDQ от 9 июля дала на ноутбуке разработчика два связанных результата:

5,4×ускорение пакетного хеширования Poseidon2b
34,9 сдоказательство на 224 позиций до
18,9 сдоказательство на 224 позиций после

Полное построение доказательства ускорилось меньше, чем изолированное хеширование: доказывающая сторона также собирает свидетель, выполняет операции схемы полиномиальных обязательств (PCS) и алгебраические вычисления вне хеш-функции. Это различие указывает на следующее узкое место и не позволяет выдать результат изолированного микроизмерения за сквозное ускорение.

Плоский базис на правильной границе

Код использует плоское 128-битное представление в полиномиальном базисе, совместимое с операциями умножения поля в режиме Galois/Counter Mode (GCM). Башенный базис представляет то же поле как последовательность меньших вложенных расширений; такая форма удобна для отдельных частей алгебры доказательства. Если преобразовывать каждую скалярную операцию между этими двумя представлениями, преимущество инструкций исчезнет. Поэтому вычисление многолинейных продолжений (MLE) и пакетная обработка Poseidon2b удерживают длинные горячие циклы в плоском базисе и переходят между представлениями только на явно заданных границах протокола.

Правило протокола

При любой аппаратной реализации элемент поля остаётся тем же математическим объектом. Динамический выбор при запуске определяет реализацию умножения и хеширования, но не параметры консенсуса.

Переносимость без скрытого скалярного режима

Штатному узлу необходима аппаратная поддержка, достаточная для построения и проверки доказательств. Для x86-64 это SSE4.1 и PCLMULQDQ; для ARM64 — NEON и PMULL. Более широкие векторные реализации служат необязательными ускорителями. Скалярная реализация полезна как эталон для дифференциального тестирования, но её неявное включение в штатном узле превратило бы формальную совместимость в риск для прогресса сети.

Особенно это важно для виртуальных машин. Физический процессор может поддерживать PCLMULQDQ, тогда как гипервизор предоставляет гостевой системе обобщённую модель CPU без этой инструкции. Узел проверяет видимые гостевой системе возможности и сообщает об отсутствующей инструкции, а не переходит незаметно в непредсказуемо медленный режим.

Как проверяются вычислительные реализации

Каждая оптимизированная реализация сравнивается с канонической скалярной семантикой. Пакетные дайджесты должны совпадать со скалярными для полных и неполных фрагментов, а умножение в поле — с эталонной редукцией. Динамический выбор реализации не должен вызывать функцию с атрибутом target_feature до проверки соответствующей возможности процессора.

Полученная конструкция обладает тремя полезными свойствами:

  1. байты доказательства переносимы между машинами;
  2. валидаторы не доверяют оптимизированному результату майнера, а пересчитывают канонический дайджест;
  3. новые уровни ISA можно добавлять через тот же интерфейс динамического выбора, не создавая ветвей протокола.

Почему выбор поля выдержал реализацию

Операции Фробениуса — повторные возведения в квадрат, являющиеся линейными отображениями в бинарном поле, — упрощают алгебру доказательства, а умножение без переносов делает то же поле практичным на современных CPU. Ускорение ядра в 5,4 раза имело значение именно потому, что при неизменном формате доказательства оно дало измеримое ускорение полного построения. Арифметика протокола и машинная арифметика сошлись в одном стабильном представлении.