Bitcoin: история развития, от CPU до FPGA

Запись в блоге разместил пользователь bblizard, 6 мар 2014.

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 раунда хэширования в одном развернутом цикле.

A Datacenter In My Garage

Потратив $300-600 на оборудование для майнинга на основе GPU, которое, практически буквально, печатает деньги, и потратив немало времени за настройкой его параметров, следующим шагом закономерно встаёт идея о наращиваниимасштабов катастрофы вычислительных мощностей.

Купив ещё один такой же GPU и повторив настройки, вы удвоите свою прибыль. На самом деле, если монетки добываются столь быстро и столь же стремительно растут в цене, возможно, имеет смысл купить десять или даже двадцать GPU! Правда, это может привести к катастрофе — из-за группового поведения майнеров, закупившихся видеокартами, до небес подскочит сложность добычи и так же стремительно упадет прибыльность майнинга. К счастью, катастрофы не произошло, благодаря росту курса USD/BTC затраты на покупку видеокарт всё же окупились.
GPU оказались гораздо более доступны для конечных пользователей, чем FPGA. Их использование для майнинга хоть и требует навыков сборки ПК и многочасового чтения форумов, но можно быть полным профаном в параллельном программировании, не говоря об инструментах для работы с FPGA. Однако для GPU характерно несколько ключевых ограничений:
1. GPU не работает сам по себе. Каждый GPU должен быть включен в 8x или 16x PCI-E разъем, которых на материнских платах сравнительно мало.
2. Материнская плата, процессор, жесткий диск и ОЗУ в GPU майнинге практически не используются, но удорожают систему, т.е. увеличивают стоимость майнинга на единицу производительности. У типичного пользователя под рукой есть единственный PC, куда можно установить 1-2 GPU, но не более того.
3. Каждый GPU потребляет 200-300W, что очень быстро превышает возможности блока питания и требует апгрейда.
4. Стандартные корпуса не рассчитаны на охлаждение нескольких GPU. Особенно, если «несколько» — это более двух.
5. Использование многих GPU быстро достигает пределов электроснабжения, охлаждения и уровня шума, допустимых в большинстве жилых районов.
6. Из-за каких-то проблем (вероятно, в программной части) реализации, для работы OpenCL может потребоваться, чтобы к GPU был подключен дисплей. Хотя сама технология подобных требований не выдвигает.
7. Типовой GPU занимает два слота в корпусе ПК, не давая подключить к ПК большое число видеокарт.

Для решения этих проблем появилось следующее решение. Во первых, т.к. майнинг биткоинов толком не использует пропускную способность интерфейса с материнской платой, то PCI-E 1x имеет достаточно пропускной способности, а GPU работает и подключенным в 1х слот. Простой кабель, продаваемый за $8, позволяет подключить 16x GPU в 1х слот. Правда это означает, что видеокарта не может находиться в корпусе ПК, что побудило энтузиастов к созданию стоек, предназначенных исключительно для монтажа GPU. Использование правильной материнской платы, с большим числом дешевых 1x слотов, решило проблему с подключением большого числа GPU. Отказ от привычного корпуса позволил решить проблему отвода тепла более эффективно. А резистор, воткнутый в DVI разъем, успешно имитирует подключение монитора, если таковое потребуется для OpenCL.
Используя такой подход, одна материнская плата, CPU, и RAM может обслуживать 5-6 GPU, тем самым повышая экономическую эффективность затеи.
[​IMG]

примеры того, как может выглядеть машина для добычи биткоинов на основе GPU(источник фото)

Некоторые такие системы могут работать стабильно на протяжении нескольких месяцев, но затем начинают проявляться проблемы со стабильностью работы. Причина в том, что GPU потребляют слишком большой ток по линии 12V, перегружая коннектор материнской платы. Решением этой проблемы становится независимый подвод питания к видеокартам, минуя материнскую плату.

После решения проблем с подключением GPU на первый план выходят вопросы надлежащего электроснабжения и охлаждения оборудования. С потреблением одного GPU в районе 200W, удельная мощность такой системы сопоставима или даже превышает показатели дата-центров. Собственно, дата-центры практически никогда и не используются для размещения GPU-майнеров из-за сопутствующих расходов и требований к сертификации оборудования. Также немногие дома способны обеспечить такую электрическую мощность, а различные схемы тарификации электроснабжения могут привести к заоблачным счетам за электричество. По этим причинам на практике удачнее всего майнинг идет на территориях складских помещений, где нет больших проблем с создаваемым шумом и охлаждением, а электричество доступно по промышленным тарифам.
[​IMG]
Bitcoin-miner, содержащий 69 GPU (источник фото)

Продолжение: http://bitalk.ru/entries/bitcoin-история-развития-от-cpu-до-fpga-2.339/

Обсуждение: http://bitalk.ru/threads/bitcoin-история-развития-от-cpu-до-fpga.601/

Статья об ASIC: http://bitalk.ru/entries/bitcoin-история-развития-asic.342/

Источник: http://habrahabr.ru/company/intel/blog/205530/
bblizard

Об авторе

http://bit.ly/2bfV8DH Это хайп через telegram, 3% в день, мин.10$, +18k человек, ввод/вывод в том числе и в битках:)