Bitcoin: історія розвитку

 Раніше нами розглядалися основні принципи, яким прямують при майнінгу біткоїнів.

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


CPU: Перше покоління майнерів


Якщо заглянути у вихідний код майнера біткоінов, то виявиться, що він напрочуд простий. Основна частина виглядає приблизно так:

while (1)

{

  HDR[kNoncePos]++;

  IF (SHA256(SHA256(HDR)) < (65535 << 208)/ DIFFICULTY)

    return;

}



Обчислення SHA256 виконується над 512-бітними блоками даних і включає 64 раунди шифрування, що вимагають безлічі 32-бітних додавань, зрушень і бітових операцій. Кожен наступний раунд шифрування залежить від результатів попереднього, створюючи ланцюжок залежностей. Хоча виконання окремих раундів шифрування не може бути розпаралелено, перевірка кожного окремого хеша може виконуватися паралельно, що робить обчислення, що чудово піддаються паралелізації.

Продуктивність таких майнер досягає 33 MH/s на процесор (Core i7 990x). Більше додати нічого.


GPU: Друге покоління майнерів


У жовтні 2010 року було опубліковано код першого open-source OpenCL майнера, після чого його було швидко адаптовано та оптимізовано стараннями ентузіастів спільноти. Подібні майнери складалися з реалізації bitcoin-протоколу мовою на кшталт Java або Python та алгоритму перебору у вигляді OpenCL-файлу, який належало скомпілювати під ISA відповідного GPU.


Величезне розмаїття OpenCL-реалізацій пояснювалося спробами вичавити з компіляторів усе, що були здатні, в гонитві за поліпшенням якості коду. Крім того, частина коду, що не відноситься до OpenCL безпосередньо, відповідала за виклик OpenCL API з метою перевірки результатів або керування параметрами GPU у відповідь на температурний режим і налаштування користувача.

Оскільки передбачалося, що подібне обладнання працюватиме місяцями, користувачі пускалися у всі тяжкі, граючи з напругою харчування (знижуючи, щоб знизити вартість накладних витрат на майнінг, або підвищуючи разом із частотою, щоб збільшити продуктивність), ядром GPU та такими параметрами коду, як кількість потоків. Все задля того, щоб збільшити пропускну здатність у рамках розумної стабільності роботи та температури.


Т.к. видобуток біткоїнів не вимагає особливого навантаження на оперативну пам'ять або операцій з плаваючою точкою, велика кількість критичних шляхів в електричній схемі або вузьких місць в архітектурі GPU ніяк не проявляють себе. Проте, з часом могла виникати потреба у перенастроюванні параметрів, т.к. системи електроживлення та охолодження згодом деградують у своїх характеристиках.

Типові GPU від AMD мають тенденцію показувати більшу продуктивність, ніж GPU від NVidia, якщо йдеться про GH/s на $, частково завдяки системі команд, що добре підходить для обчислень SHA256, та архітектурі VLIW, яка містить більшу кількість ALU, що працюють паралельно, нехай і на трохи меншій частоті. Зокрема операції зсуву і бітового вибору можуть бути реалізовані єдиною інструкцією AMD ISA.

Вбудована графіка, зокрема від Intel, вже зараз має кращі показники продуктивності на ват, але для CPU характерні набагато скромніші power-бюджети — 200W, типові для GPU, абсолютно неприйнятні для CPU, який, взагалі кажучи, ще й не тільки графікою зайнятий . Крім того, до одного комп'ютера не вдасться підключити стільки CPU, скільки можна підключити відеокарт. Та й амортизація обладнання не настільки швидка для CPU. Тому вбудована графіка – це не вибір майнера.


Основний код майнера, написаний на OpenCL, а не асемблері або в машинних кодах, після компіляції нерідко патчився з метою використання інструкцій GPU, які безпосередньо не підтримуються OpenCL.

Реалізація на OpenCL є одним великим блоком коду, який на початку вибирає ряд параметрів, на основі id потоку, а потім виконує всі 64 раунди хешування в одному розгорнутому циклі.

Bitcoin: історія розвитку


Отправить комментарий

0 Комментарии