Продвинутый Урок 5 4 мин чтения

GPU, ASIC и разница между 2^40 и 2^70

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

Обычный процессор, выполняя хорошо написанную программу, тестирует около нескольких миллионов ключей в секунду. Современная видеокарта тестирует миллиарды. Разница не в том, что видеокарта быстрее — её ядро медленнее, чем у процессора, — а в том, что у неё их тысячи.

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

Шестнадцать тысяч маленьких рук вместе делают то, что не могут сделать шестнадцать больших рук.

Стоит уточнить, что именно видеокарта делает быстро. Самая затратная часть — это арифметика в конечном поле, особенно модульное обращение, и большой прирост достигнут благодаря организационному трюку: обработке сотен или тысяч точек в пакете с одним обращением, общим для всех. Остальное — хеши, сравнения — дёшево. Программы, такие как keyhunt и VanitySearch, которые будут представлены в следующем модуле, в значительной степени являются аккуратными реализациями этой идеи.

Теперь вопрос, который задают все: а что насчёт ASIC? Если существуют специализированные чипы для майнинга, почему бы не для поиска ключей?

Ответ состоит из двух частей, и обе интересны. Первая — ASIC для майнинга не подходят: они вычисляют SHA-256 по заголовку из восьмидесяти байт и ничего больше. Они не умеют умножать точки на кривой, не умеют выполнять модульное обращение, и никакое обновление программного обеспечения не научит их этому — логика записана в кремнии.

Вторая часть заключается в том, что ASIC, специально созданный для кривой secp256k1, технически возможен, но экономически сложен. Проектирование и производство чипа стоит миллионы долларов и занимает более года, а результат подходит только для одной задачи. Майнер окупает эти инвестиции постоянным доходом; тот, кто ищет конкретный ключ, имеет единовременный и неопределённый приз, который может быть получен кем-то другим за день до доставки чипа. Поэтому на практике мир вызовов работает на арендованных или купленных с рук видеокартах.

Форма стоит целое состояние и подходит только для одной детали.

С учётом этого, разница между 2^40 и 2^70 становится ясной. Сорок бит — это триллион кандидатов: видеокарта решает за минуты, а ноутбук — за часы. Пятьдесят бит — это в тысячу раз больше: часы на видеокарте. Шестьдесят бит — ещё в тысячу раз больше: недели. Семьдесят бит — ещё в тысячу раз больше: шесть тысяч лет на одной видеокарте, как было рассчитано в Уроке 2.

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

Три ступени выше, тот же путь уже не тот же путь.

И именно поэтому прогресс медленный и предсказуемый. Аппаратное обеспечение улучшается, но улучшение происходит в два или три раза с каждым поколением, и каждый фактор два покупает ровно один бит. Видеокарта, в десять раз быстрее нынешней, продвинется чуть более чем на три бита на границе. Ни одно поколение аппаратного обеспечения не превратит восемьдесят бит в нечто простое, и ничто на горизонте не угрожает 256 битам правильно сгенерированного ключа.

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