Майнинг на алгоритме консенсуса Proof-of-Work с хеш-функцией Ethash (ранее Dagger Hashimoto) уже несколько лет является одним из наиболее популярных среди сообщества майнеров. Это связано со множеством причин, среди которых популярность блокчейн-платформы Ethereum, легкость проведения вычислений на видеокартах, хороший профит от майнинга эфира и его клонов на GPU.

Какие вычисления производит компьютер при майнинге на алгоритме Ethash?

При проведении вычислений на алгоритме Ethash производится генерация уникальных коротких бинарных данных, которые называются Nonce.

Nonce – это аббревиатура от английской фразы number that can only be used once, которая переводится как число, которое может использоваться только один раз. При построении цепочек блоков Ethereum (или любой другой подобной платформы, например, Nilu) подходящее определенным условиям значение nonce записывается в их заголовок. В качестве условия используется целевое значение сложности проведения вычислений – переменная Target. Процесс нахождения Nonce заключается в переборе случайных числовых значений на предмет соответствия заданному значению сложности по криптографическому алгоритму Ethash.

Фактически проведение вычислений при майнинге на Ethash и других алгоритмах Proof-of-Work заключается в угадывании числа, отвечающего определенным условиям. Вознаграждение за найденное решение получает тот, кто первым отправит его в сеть и получит согласие от других узлов о его соответствии заданной хеш-функции.

Алгоритм Ethash базируется на псевдослучайной таблице данных Directed Acyclic Graph (DAG), которая связана с текущим состоянием блокчейна. Эти данные генерируются каждые 30,000 blocks (приблизительно каждые 5 дней).

С увеличением количества блоков размер таблицы DAG растет, что приводит к неспособности производить вычисления на алгоритме Ethash видеокартами или другими устройствами с объемом памяти меньше текущего DAG. В связи с этим к концу 2020 года четырехгиговые карты уже не смогут добывать такие монеты, как ETH и ETC.

Помимо доступного свободного объема видеопамяти проведение вычислений с большими объемами данных лимитируется ограничениями технологии OpenCL (используется в видеокартах AMD) на размер непрерывного блока данных (4096 Мб), хотя оно с успехом преодолевается путем разделения DAG на части.

Последовательность действий по нахождению решения по алгоритму Ethash заключается в следующем:

  • В качестве начальных данных берутся: число из заголовка предыдущего валидного блока (Preprocessed Header) и случайно подобранное значение Nonce.

  • Они складываются по SHA3-подобному алгоритму и создают 128-байтное число – Mix 0.

  • Число Mix используется для определения одной из 128-байтных страницы Get DAG Page, которая будет использоваться при последующих вычислениях (микшировании).
  • Mix микшируется с выбранной страницей DAG на основе хеш-функции Ethash в результате чего генерируется следующее число, называемое Mix 1.
  • Шаги 3 & 4 повторяются 64 раза, вследствие чего получается число Mix 64.
  • Mix 64 сокращается до 32-байтного числа Mix Digest.

Последовательность работы при проведении вычислений по нахождению nonce:

  • Mix Digest сравнивается с 32-байтным значением целевой сложности майнинга Target Threshold. Если Mix Digest соответствует Target Threshold, тогда текущее значение Current Nonce считается успешно найденным и передается в сеть. В противном случае процесс вычислений повторяется с другим nonce (производится либо увеличение текущего значения nonce, либо подбор нового случайного числа).

Графическое изображение процесса нахождения решения по алгоритму Ethash:

Почему майнинг на алгоритме Ethash столь требователен к памяти?

Каждая операция по микшированию требует чтения 128 байт данных из DAG (шаг 2 на рисунке). Нахождение одного nonce требует проведения 64 операций микширования, при этом задействуется 128 байт x 64 = 8 KB памяти. Чтение данных DAG производится в псевдослучайном порядке (согласно функции микширования), поэтому использование кеша L1 или L2 практически не увеличивает общее быстродействие, так как следующий фрагмент DAG с большой степенью вероятности не будет находиться в этом кэше.

Так как чтение данных DAG из видеопамяти происходит намного медленнее, чем процесс микширования в ядре видеокарты, увеличение скорости последнего (разгон по ядру) мало влияет на хешрейт. Самое большое влияние на увеличение хешрейта при майнинге на алгоритме Etash (Dagger Hashimoto) оказывает именно быстродействие операций чтения 128-байтных блоков данных DAG из памяти. Именно из-за лимитов памяти, которые ограничивают быстродействие вычислений, Ethash считается «memory hard» алгоритмом.

Как связан хешрейт при проведении вычислений на алгоритме Ethash с быстродействием памяти?

Наибольший хешрейт, который может выдать видеокарта, зависит от производительности ее подсистемы памяти. При константном значении размера выборки DAG для вычисления одного хеша, равного 8 Кб, она прямо зависит от полосы пропускания видеопамяти (Memory Bandwidth) и вычисляется по следующей формуле:

(Memory Bandwidth) / 8 Кб/hash = Max теоретический хешрейт

Например, для видеокарты Radeon RX580, у которой пропускная способность памяти равна 256 Gb/sec, максимальный хешрейт в стоке будет равен:

(256 Gb/s) / (8 kb/hash) = 32 MH/s,

При этом на нахождение одного хеша у RX580 затрачивается 31,25 наносекунд.

Для обработки данных в ядре видеокарты также требуется определенная вычислительная мощность. Для ее нахождения можно использовать эмпирическую формулу:

Частота ядра при майнинге на Ethash = Частота памяти х 0,561

Можно ли использовать оперативную память компьютера для вычислений по алгоритму Ethash?

Обычная оперативная память (DDR4), использующаяся в компьютерах, обычно работает в 1-2 канальном режиме и на меньших частотах в сравнении с видеопамятью. Так как ОЗУ компьютера имеет во много раз меньшую пропускную способность, чем у VRAM GPU, то ее использование для майнинга на Ethash не эффективно.

Это связано как с низкой эффективной рабочей частотой (до 4000 МГц), так и с относительно узкой шириной шины передачи данных (64 бита для одного канала). У видеопамяти GDDR5 рабочая частота находится в пределах 7-10 тысяч МГц (у хороших чипов даже больше), а ширина шины данных даже у самых слабых видеокарт обычно составляет 128 бит.

Например, ОЗУ DDR4, работающая на частоте 2400 MHz, имеет пиковую скорость передачи данных, равную 19,2 GB/sec. Поэтому она без разгона и модификации таймингов может обеспечить хешрейт не более 19,2/8=2,4 MH/s.

“Крутая” память G.Skill TridentZ DDR4-типа, работающая на частоте 4000 МГц, имеет эффективную пропускную способность в 25.6 GB/sec. В одноканальном режиме она способна обеспечить хешрейт в 25.8/8=3.2 MH/s, что все равно не идет ни в какое сравнение с памятью GDDR5, работающей на более высоких частотах в многоканальном режиме.

Как работают ASIC-и с памятью DDR3 на алгоритме Ethash?

Производители ASIC-ов для алгоритма Ethash обходят ограничения по производительности памяти типа DDR3, увеличивая размер шины передачи данных (количество каналов памяти). Благодаря этому ASIC Antminer F3 (E3) при использовании 72 Гб памяти DDR3 имеет на Ethash производительность, сравнимую с видеокартами (хешрейт 150 MH/s при потреблении 800 Вт).

Как связан хешрейт на алгоритме Ethash с частотой и шириной шины памяти?

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

Вычислить пропускную способность памяти можно по формуле:

Memory Bandwidth (GB/sec) = Memory Interface * Memory Clock (Data Rate) / 8 бит

Например, у видеокарты Radeon RX580 с памятью GDDR5 стоковая полоса пропускания равна 256х8000/8=256 GB/sec (хешрейт до 32 MH/s).

Так как ширину шины памяти изменить нельзя, то для увеличения быстродействия нужно увеличивать частоту и тайминги памяти. Если увеличить эффективную частоту работы памяти GDDR5 до 8500 МГц, то ее полоса пропускания увеличится на 16 GB/sec и станет равной 256х8500/8=272 GB/sec, что должно увеличить хешрейт до 34 MH/s .

Как серьезно увеличить хешрейт на алгоритме Ethash?

Еще больше увеличить быстродействие можно путем модификации таймингов, ответственных за чтение данных. Для памяти GDDR5 это с успехом делается путем прошивки быстродействующих таймингов (обычно с частоты 1500 МГц) в более высокочастотные страпы, а также путем модификации значения REF (программой amdmemorytweak или в Claymore включением опции rxboost 1).

У видеокарт AMD серии VEGA с памятью HBM2 диапазон возможных твикингов значительно больше. У них есть смысл модифицировать значения RAS, RCDRD, RCDWR, RC, RP, RRDS, RRDL, RFC и REF.

Для практического увеличения быстродействия подсистемы памяти при майнинге на алгоритме Ethash используются:

  • разгон памяти в BIOS GPU, батнике майнера, либо специальными утилитами (nvidiainspector для видеокарт Nvidia, overdriventtool для AMD или универсальная программа MSI Afterburner);
  • использование модифицированных таймингов на повышенных частотах с помощью модификации BIOS видеокарт;
  • изменение (твикинг) параметров работы с чипами памяти на лету с помощью программы AMDmemorytweak для памяти GDDR5, ETHEnlargmentpill для GDDR5+;
  • изменение таймингов при майнинге с помощью параметров командной строки батника в майнере Клеймор и других программах.

В качестве справочных данных приведем информацию о максимальном теоретическом хешрейте на Ethash популярных видеокарт при стоковых настройках. При использовании данных из таблицы нужно учитывать, что реальный хешрейт видеокарт также зависит от производительности ядра, которое используется вычислении значений nonce. Эмпирическим путем установлено, что на практике хешрейт равен 0,84 от максимального теоретического (при стоковых значениях разгона).

У видеокарт с большой разрядностью шины памяти реальный хешрейт может быть значительно меньше теоретического, так как у них производительность ядра обычно отстает от пропускной способности шины памяти.

Из-за отставания производительности ядра от подсистемы памяти, реальный хешрейт на алгоритме Ethash у таких видеокарт как R9 280, R9 290, R9 295, Fury и других карт с огромной шиной памяти ниже теоретического максимума даже в Linux. У них разгон ядра сразу же откликается хорошей прибавкой в хешрейте, при этом память остается недогруженной.

У карт серии RX Vega производительность ядра значительно выше и они показывают хешрейт, более соответствующий теоретическому при сопоставимой пропускной способности памяти.

Кроме того, на хешрейт в значительной мере влияет реализация работы с памятью в драйверах операционной системой. Из-за недостатков в драйверах Windows на видеокартах R9 290/390 на поздних DAG выдает всего 18-19 MH/s, а Linux – порядка 29 MH/s. Подробнее об этом можно прочитать в статье «Как добиться от видеокарт Radeon R9 290/390 хешрейта 29-30 MH/s на Ethash».

Таблица с информацией о максимальном теоретическом хешрейте видеокарт AMD при заводских настройках подсистемы видеопамяти (без разгона):

Название видеокарты Пропускная способность памяти
(Memory Bandwidth), GB/sec
Ширина шины памяти, бит Объем видеопамяти, GB Тип памяти Макс. хешрейт на Ethash (в стоке), MH/s
Radeon R7 360 104 128 2 GDDR5 13
Radeon R7 370 179,2 256 2 GDDR5 22,4
Radeon R9 370X 179,2 256 4 GDDR5 22,4
Radeon R9 270X 179,2 256 2 GDDR5 22,4
Radeon R9 280 240 384 3 GDDR5 30
Radeon R9 280X 288 384 3 GDDR5 36
Radeon R9 285 176 256 2 GDDR5 22
Radeon R9 290 320 512 4 GDDR5 40
Radeon R9 290X 320 512 4 GDDR5 40
Radeon R9 295X2 2х320 2х512 8 GDDR5 80
Radeon R9 380 182,4 256 2 GDDR5 22,8
Radeon R9 390 384 512 8 GDDR5 48
Radeon R9 390X 384 512 8 GDDR5 48
Radeon R9 Fury 512 4096 4 HBM 64
Radeon R9 Fury X 512 4096 4 HBM 64
Radeon R9 Nano 512 4096 4 HBM 64
Radeon RX460/560 112 128 2/4 GDDR5 14
Radeon RX470 211,2 256 4/8 GDDR5 26,4
Radeon RX480/580 256 256 4/8 GDDR5 32
Radeon RX540 96 128 2/4 GDDR5 12
Radeon RX550 112 128 2/4 GDDR5 14
Radeon RX570 224 256 4/8 GDDR5 28
Radeon RX590 256 256 8 GDDR5 32
Radeon RX640 112 128 2 GDDR5 14
RX Vega 56 409,6 2048 8 HBM2 51,2
RX Vega 64 483,8 2048 8 HBM2 60,47
Radeon VII 1024 4096 16 HBM2 128
Radeon Pro 5300M/ W5300M 192 128 4 GDDR6 24
Radeon Pro 5500M/ W5500M 192 128 8/4 GDDR6 24
RX5500/5500XT 224 128 4 GDDR6 28
RX5600 288 192 6 GDDR6 36
RX5700 448 256 8 GDDR6 56
RX5800XT 448 256 8 GDDR6 56
RX5900/5900XT 672 384 12 GDDR6 84

Таблица с информацией о максимальном теоретическом хешрейте видеокарт Nvidia при заводских настройках подсистемы видеопамяти (без разгона):

Название видеокарты Пропускная способность памяти
(Memory Bandwidth), GB/sec
Ширина шины памяти, бит Объем видеопамяти, GB Тип памяти Макс. хешрейт на Ethash (в стоке), MH/s
GTX 750Ti 88 128 2 GDDR5 11
GTX 760/760Ti 192,3 256 2 GDDR5 24
GTX 770 224 256 2 GDDR5 28
GTX 780 288,4 384 3 GDDR5 36
GTX 780Ti 336,5 384 3 GDDR5 42
GTX 950 106 128 2 GDDR5 13,2
GTX 960 112 128 2 GDDR5 14
GTX 970 224,4 256 4 GDDR5 28
GTX 980 224 256 4 GDDR5 28
GTX 980Ti 336 384 6 GDDR5 42
GTX 1030 48,06 64 2 GDDR5 6
GTX 1050 112,1 128 2 или 4 GDDR5 14
GTX 1050Ti 112,1 128 4 GDDR5 14
GTX 1063 192,2 192 3 GDDR5 24
GTX 1066 192,2 192 6 GDDR5 24
GTX 1068 256,3 256 8 GDDR5 32
GTX 1070 256,3 256 8 GDDR5 32
GTX 1070Ti 256,3 256 8 GDDR5 32
GTX 1080 320,3 256 8 GDDR5+ 40
GTX 1080Ti 484 352 11 GDDR5+ 60
GTX 1650 128 128 4 GDDR5 16
GTX 1650 Ti 192 128 4 GDDR6 24
GTX 1650S 192 128 4 GDDR6 24
GTX 1660S 336 192 6 GDDR6 42
GTX 1660 Ti 288 192 6 GDDR6 36
GeForce GTX Titan 288,4 384 6 GDDR5 36
Quadro GV100 870 4096 32 HBM2 108
Tesla T4 320 256 16 GDDR6 40
RTX2060 336 192 6 GDDR6 42
RTX2060S 448 256 8 GDDR6 56
RTX2070 448 256 8 GDDR6 56
RTX2070S 448 256 8 GDDR6 56
RTX2080 448 256 8 GDDR6 56
RTX2080S 495,5 256 8 GDDR6 61
RTX2080Ti 616 352 11 GDDR6 77

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *