Майнинг,  Статьи

Особенности майнинга на алгоритме Ethash

Майнинг на алгоритме консенсуса 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» алгоритмом.

Good Quality GPU - AMD Radeon RX 580 8 GB with 3 fans
Одна из лучших видеокарт для майнинга на алгоритме Ethash — AMD Radeon RX 580 с 8 GB памяти

Как связан хешрейт при проведении вычислений на алгоритме 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 3601041282GDDR513
Radeon R7 370179,22562GDDR522,4
Radeon R9 370X179,22564GDDR522,4
Radeon R9 270X179,22562GDDR522,4
Radeon R9 2802403843GDDR530
Radeon R9 280X2883843GDDR536
Radeon R9 2851762562GDDR522
Radeon R9 2903205124GDDR540
Radeon R9 290X3205124GDDR540
Radeon R9 295X22х3202х5128GDDR580
Radeon R9 380182,42562GDDR522,8
Radeon R9 3903845128GDDR548
Radeon R9 390X3845128GDDR548
Radeon R9 Fury51240964HBM64
Radeon R9 Fury X51240964HBM64
Radeon R9 Nano51240964HBM64
Radeon RX460/5601121282/4GDDR514
Radeon RX470211,22564/8GDDR526,4
Radeon RX480/5802562564/8GDDR532
Radeon RX540961282/4GDDR512
Radeon RX5501121282/4GDDR514
Radeon RX5702242564/8GDDR528
Radeon RX5902562568GDDR532
Radeon RX6401121282GDDR514
RX Vega 56409,620488HBM251,2
RX Vega 64483,820488HBM260,47
Radeon VII1024409616HBM2128
Radeon Pro 5300M/ W5300M1921284GDDR624
Radeon Pro 5500M/ W5500M1921288/4GDDR624
RX5500/5500XT2241284GDDR628
RX56002881926GDDR636
RX57004482568GDDR656
RX5800XT4482568GDDR656
RX5900/5900XT67238412GDDR684

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

Название видеокартыПропускная способность памяти
(Memory Bandwidth), GB/sec
Ширина шины памяти, битОбъем видеопамяти, GBТип памятиМакс. хешрейт на Ethash (в стоке), MH/s
GTX 750Ti881282GDDR511
GTX 760/760Ti192,32562GDDR524
GTX 7702242562GDDR528
GTX 780288,43843GDDR536
GTX 780Ti336,53843GDDR542
GTX 9501061282GDDR513,2
GTX 9601121282GDDR514
GTX 970224,42564GDDR528
GTX 9802242564GDDR528
GTX 980Ti3363846GDDR542
GTX 103048,06642GDDR56
GTX 1050112,11282 или 4GDDR514
GTX 1050Ti112,11284GDDR514
GTX 1063192,21923GDDR524
GTX 1066192,21926GDDR524
GTX 1068256,32568GDDR532
GTX 1070256,32568GDDR532
GTX 1070Ti256,32568GDDR532
GTX 1080320,32568GDDR5+40
GTX 1080Ti48435211GDDR5+60
GTX 16501281284GDDR516
GTX 1650 Ti1921284GDDR624
GTX 1650S1921284GDDR624
GTX 1660S3361926GDDR642
GTX 1660 Ti2881926GDDR636
GeForce GTX Titan288,43846GDDR536
Quadro GV100870409632HBM2108
Tesla T432025616GDDR640
RTX20603361926GDDR642
RTX2060S4482568GDDR656
RTX20704482568GDDR656
RTX2070S4482568GDDR656
RTX20804482568GDDR656
RTX2080S495,52568GDDR661
RTX2080Ti61635211GDDR677

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

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