Некоторые пользователи Bitcoin задают вопрос: почему майнинг на GPU (видеокарте) быстрее чем майнинг на CPU (процессоре)?
Для начала давайте уточним:
CPU – центральный процессор (или просто процессор), является частью компьютера, исполняющей задачи программного обеспечения и указывающей всем остальным частям компьютера, что они должны делать в соответсвии с командами программ и пользователя.
GPU — графический процессор, является частью видео подсистемы компьютера. Основная функция GPU – рендеринг 3D графики и визуальных эффектов.
И GPU и CPU – являются процессорами, но сконструированны они были для выполнения различных задач. Эта конструктивная разница и делает GPU более производительным при майнинге в Bitcoin.
Короткий ответ:
Ядро CPU обрабатывает 4 32-битных инструкции за такт (SSE), или 8 32-битных инструкций за такт (AVX), в то время как GPU Radeon HD 5970 способно обработать 3200 32-битных инструкции за такт (используя свои 3200 ALU или шейдеров). Получается что в этом примере GPU способно обработать в 800 (или в 400 (при AMX)) раз больше инструкций за такт чем СPU.
Даже не смотря на то, что с 2011 года производятся CPU c 6, 8 и 12 ядрами, и тактовой частотой в районе 2000-3000 МГц и более, GPU Radeon HD 5970 (с тактовой частотой 750 МГц) остаётся более чем в 5 раз быстрее четырёх 12-ядерных CPU с частотой 2,3 ГГц (при стоимости последних в районе $4700, в отличии от $350 за HD5970).
CPU - «начальник»
CPU, в первую очередь, разрабатывались для того, чтобы принимать решения в соответствии с указаниями программы. Например, если вы печатаете документ и сохраняете его, то работа CPU заключается в том, чтобы преобразовать ваш документ в соответствующий тип файла и дать указание жёсткому диску записать этот файл. Процессор также способен выполнять математические расчёты, в каждом CPU есть один или несколько ALU, способен следовать инструкциям «если произошло это - сделай то, иначе сделай что то другое». Большое количество элементов CPU занимаются отслеживанием того, способны ли остальные элементы переключиться на выполнение новой задачи в необходимый момент.
Еще CPU выполняет множество других операций, которые добавляют сложности к его архитектуре, в том числе:
- ограничение привилегий между пользовательскими программами и операционной системой
- создание «иллюзии» виртуальной памяти для выполняемых программ
- обеспечение обратной совместимости для выполнения устаревших программ и инструкций
GPU - «рабочий»
GPU были разработаны для обработки видео. Да, GPU могут делать и математические расчёты и многие другие задачи, но сконструированы они были именно для обработки видео, а не для принятия решений. Обработка видео представляет из себя большие объёмы однотипной работы, при которой пикселям на экране монитора постоянно указывается, что они должны делать. Для эффективного выполнения такой работы GPU сконструированы так, что могут быстро обрабатывать большие объёмы повторяющихся операций, но при этом довольно медлительны в переключении на новую задачу. GPU содержат в себе большое количество ALU, значительно большее, чем содержат в себе CPU. В результате чего GPU выполняет громоздкие математические вычисления намного быстрее чем CPU.
Аналогия:
Представим себе что CPU — это маленькая группа очень умных людей. Они способны быстро справиться с любой поставленной задачей. Тогда GPU — это большая группа «бездарей», каждый из которых не в состоянии быстро выполнить какую-либо задачу, но которых можно научить выполнять повторяющиеся действия. В таком случае производительность большого числа «бездарей» делающих однотипную повторяющуюся работу окажется выше чем производительность небольшого числа очень умных людей выполняющих ту же работу.
Это вовсе не означает что CPU жирный, избалованный или ленивый. И CPU и GPU — изготовлены из миллиардов микроскопических транзисторов, размещённых на маленьком кусочке кремния, при этом то, что позволяет CPU хорошо делать свою работу — это более сложная структура каждого элемента. Сложнее структура — больше площади занимает каждый элемент, а площадь на кремниевом чипе стоит дорого. В отличие от CPU, в GPU структура каждого элемента проста и мала по площади, что позволяет разместить на одном чипе большее количество «бездарных» элементов.
ALU в GPU разбиваются на группы, в которых каждый участник в составе группы выполняет ту же операцию что и остальные (и не может выполнять какую то иную операцию). Они все будут работать над почти идентичной вариацией одной задачи, в идеальной синхронизации друг с другом, либо будут простаивать. При майнинге в Bitcoin выполняется одна постоянная операция - обработка хэш-функций, отличающихся друг от друга только одним символом — эта задача очень хорошо подходит для обработки на GPU.
Возьмём, к примеру, GPU Radeon HD 5970 — это популярная и высокопроизводительная видеокарта для майнинга содержит в себе 3200 ALU, которые можно рассматривать как 3200 «бездарных исполнителей», обученных делать одни и те же повторяющиеся задачи до тех пор, пока им не придётся прерываться для принятия каких либо решений. Radeon HD 5970 сконструирован по архитектуре VLIW-5, это означает что 3200 исполнителей объединены в 640 групп, и каждая группа способна выполнить 5 операций за 1 такт. Для сравнения возьмём 4-х ядерный CPU, способный моментально переключаться на новые задачи и принимать решения, он содержит в себе всего 4 (или небольшое кратное 4 количество) ALU.Так как ALU выполняет всю работу необходимую для майнинга в Bitcoin, то скорость майнинга напрямую зависит от количества ALU.
Вот причины по которым майнинг на GPU гораздо эффективнее майнинга на CPU: майнинг в Bitcoin не требует принятия решений, а представляет собой повторяющиеся математические операции. Принятие решений состоит только в определении «у меня есть блок» или «у меня нет блока». Это великолепная работа для выполнения на GPU.
Почему GPU AMD больше подходят для майнинга чем GPU Nvidia?
Во-первых, AMD конструирует свои GPU с использованием большого количества простых ALU (VLIW-архитектура), работающих на низких тактовых частотах (в среднем 1120-3200 ALU на частотах 625-900 МГц), в то время как конструкция GPU Nvidia состоит из меньшего числа более сложных ALU, что компенсируется повышением тактовой частоты ( в среднем 448-1024 ALU на частотах 1150-1544 МГц). Из-за разниц в архитектуре GPU ALU Nvidia занимают большую площадь, чем ALU AMD, соответственно Nvidia размещает в чипе меньшее количество ALU. Это и приводит к выигрышу GPU AMD в решении задач, в которых важнейшим является производительность ALU:
- AMD Radeon HD 6990: 3072 ALU x 830 МГц = 2550 миллиардов 32-битных инструкций в секунду
- Nvidia GTX 590: 1024 ALU x 1214 МГц = 1243 миллиардов 32-битных инструкций в секунду
Эта примерно 2х-3х кратная разница в производительности наблюдается во всём диапазоне линеек GPU от AMD и Nvidia, что сказывается в скорости решения всех ALU-связанных задач, таких как Bitcoin, подбор пароля (брутфорс) и т.д.
Во-вторых, алгоритм майнинга в Bitcoin основан на SHA-256, основная операция которого исполняется 1 инструкцией в GPU AMD (BIT_ALIGN_INT), но требует исполнения 3 инструкций в GPU Nvidia (2 shifts + 1 add), что даёт выигрыш производительности GPU AMD в 1,7 раза по сравнению с GPU Nvidia (около 1900 инструкций для AMD и около 3250 инструкций для Nvidia исполняются для функции сжатия SHA-250).
Суммарно эти 2 фактора делают производительность GPU AMD в 3-5 раз выше при майнинге в Bitcoin.