Я слышал о людях, использующих ПЛИС для улучшения производительности систем, которые занимаются такими вещами, как добыча монет, электронная торговля и сворачивание белков.
Как FPGA может конкурировать с процессором по производительности, если процессор обычно работает как минимум на порядок быстрее (с точки зрения тактовой частоты)?
Ответы:
ЦП являются устройствами последовательной обработки. Они разбивают алгоритм на последовательность операций и выполняют их по одному.
ПЛИС являются (или могут быть сконфигурированы как) устройствами параллельной обработки. Весь алгоритм может быть выполнен за один такт, или, в худшем случае, гораздо меньше тактов, чем последовательный процессор. Одна из издержек, связанных с повышенной сложностью логики, - это, как правило, более низкий предел, при котором устройство может быть синхронизировано.
Принимая во внимание вышесказанное, ПЛИС могут превосходить ЦП при выполнении определенных задач, потому что они могут выполнять ту же задачу за меньшее количество тактов, хотя и с более низкой общей тактовой частотой. Усиления, которые могут быть достигнуты, сильно зависят от алгоритма, но, по крайней мере, порядок величины не является нетипичным для чего-то вроде БПФ.
Кроме того, поскольку вы можете встроить несколько модулей параллельного выполнения в ПЛИС, если у вас большой объем данных, которые вы хотите передать по одному и тому же алгоритму, вы можете распределить данные между модулями параллельного выполнения и получить еще на несколько порядков более высокую пропускную способность. чем это может быть достигнуто даже с многоядерным процессором.
Цена, которую вы платите за преимущества, - это энергопотребление и $$$.
источник
У Маркта это в основном верно, но я собираюсь добавить сюда свои 2 цента:
Представьте, что я сказал вам, что хочу написать программу, которая меняет порядок бит внутри 32-разрядного целого числа. Что-то вроде этого:
Теперь моя реализация не элегантна, но я уверен, что вы согласны с тем, что для этого потребуется некоторое количество операций и, возможно, какой-то цикл. Это означает, что в ЦП вы потратили много больше, чем 1 цикл для реализации этой операции.
В FPGA вы можете просто подключить это как пару защелок. Вы записываете свои данные в какой-то регистр, а затем подключаете их в другой регистр в обратном битовом порядке. Это означает, что операция завершится за один такт в FPGA. Таким образом, за один цикл FPGS выполнил операцию, на выполнение которой у вашего процессора общего назначения ушло много тысяч циклов! Кроме того, вы можете подключить несколько сотен этих регистров параллельно. Таким образом, если вы можете переместить несколько сотен чисел на ПЛИС, то за один цикл она завершит эти тысячи операций сотни раз, и все за 1 такт ПЛИС.
Существует много вещей, которые может выполнять процессор общего назначения, но в качестве ограничения мы устанавливаем обобщенные и простые инструкции, которые обязательно должны быть расширены в списки простых инструкций для выполнения некоторых задач. Таким образом, я мог бы заставить ЦП общего назначения иметь инструкцию типа «обратный порядок битов для 32-разрядного регистра» и дать ЦПУ такую же возможность, что и у только что созданной ПЛИС, но таких бесконечно много таких полезных инструкций, и поэтому мы ставьте только те, которые гарантируют стоимость в популярных процессорах.
FPGA, CPLD и ASIC предоставляют вам доступ к необработанному оборудованию, которое позволяет вам определять сумасшедшие операции, такие как «дешифрование зашифрованных байтов AES256 с помощью ключа» или «декодирование кадра видео h.264». Они имеют задержки более одного тактового цикла в FPGA, но они могут быть реализованы гораздо более эффективными способами, чем запись операции в миллионах строк универсального кода сборки. Это также дает преимущество, заключающееся в том, что FPGA / ASIC фиксированного назначения для многих из этих операций более энергоэффективны, поскольку им не нужно выполнять слишком много посторонней работы!
Параллелизм - это другая часть, на которую указал Маркт, и, хотя это тоже важно, главное, когда FPGA распараллеливает что-то, что уже было дорого в ЦПУ, с точки зрения циклов, необходимых для выполнения операции. Как только вы начнете говорить: «Я могу выполнить в 10 циклах ПЛИС задачу, которая занимает 100 000 циклов моего ЦП, и я могу выполнять эту задачу параллельно по 4 предметам одновременно», вы можете легко понять, почему ПЛИС может быть чертовски много быстрее, чем процессор!
Так почему бы нам не использовать FPGA, CPLD и ASIC для всего? Потому что в целом это целый чип, который делает только одну операцию. Это означает, что, хотя вы можете заставить процесс работать на много порядков быстрее в вашей FPGA / ASIC, вы не сможете изменить его позже, когда эта операция больше не будет полезна. Причина, по которой вы не можете (обычно) изменить FPGA, когда она находится в цепи, заключается в том, что проводка для интерфейса является фиксированной, и обычно схема не содержит компонентов, которые позволили бы вам перепрограммировать FPGA в более полезную конфигурацию. Есть некоторые исследователи, пытающиеся создать гибридные модули FPGA-CPU, где есть участок CPU, который можно перепрограммировать / перепрограммировать как FPGA, что позволяет вам «загрузить» эффективный участок CPU,
источник
Все другие популярные ответы, представленные здесь, говорят о буквальных различиях между ПЛИС и процессорами. Они указывают на параллельную природу FPGA по сравнению с последовательной природой CPU или приводят примеры того, почему определенные алгоритмы могут хорошо работать на FPGA. Все это хорошо и верно, но я бы сказал, что между процессорами и FPGA есть более фундаментальная разница.
Какой общий знаменатель между ПЛИС и процессором? Это то, что они оба построены на основе кремния. А в некоторых случаях буквально одни и те же кремниевые процессы.
Принципиальное отличие - это абстракции, которые мы накладываем поверх этого кремния. Один человек не может понять всех деталей единой современной конструкции ЦП, от кремниевой до упакованной ИС. Поэтому, как часть процесса разработки, мы делим эту сложную проблему на более мелкие управляемые проблемы, которые люди могут обернуть вокруг себя.
Подумайте, что нужно, чтобы превратить этот кремний в работающий процессор. Вот несколько упрощенный вид слоев абстракции, необходимых для этой цели:
Сначала у нас есть инженеры, которые знают, как создавать транзисторы из кремния. Они знают, как проектировать крошечные транзисторы, которые потребляют мощность и переключаются с частотой 10 или даже 100 гигагерц, и они знают, как проектировать мощные транзисторы, которые могут управлять сигналами с достаточной мощностью, чтобы отправлять их из пакета IC и через плату. на другой чип.
Затем у нас есть разработчики цифровой логики, которые знают, как собрать эти транзисторы в библиотеки с сотнями различных логических ячеек. Логические ворота, шлепанцы, мультиплексоры и сумматоры и многие другие. Все в различных конфигурациях.
Затем у нас есть различные группы инженеров, которые знают, как соединить эти цифровые (а иногда и аналоговые) блоки в функциональные блоки более высокого уровня, такие как высокоскоростные приемопередатчики, контроллеры памяти, предсказатели ветвлений, ALU и т. Д.
Затем у нас есть разработчики ЦП для проектирования высокопроизводительных ЦП, объединяя эти функциональные блоки в единую систему.
И это не останавливается там. На данный момент у нас есть работающий процессор, который выполняет ассемблерный код, но это не тот язык, на котором большинство программистов пишут в наши дни.
И оттуда могут продолжаться слои абстракции. Важным моментом здесь является то, что эти уровни абстракции объединяются, образуя основанную на процессоре систему, которая масштабируется и стоит незначительную долю от заказной кремниевой конструкции.
ОДНАКО, важно отметить, что каждая абстракция также несет свою стоимость. Конструктор транзисторов не создает идеальный транзистор для каждого случая использования. Он создает разумную библиотеку, и поэтому иногда используется транзистор, который потребляет немного больше энергии или немного больше кремния, чем на самом деле необходимо для работы. И точно так же разработчики логики не строят все возможные логические ячейки. Они могут построить вентиль NAND с 4 входами и вентиль NAND с 8 входами, но что произойдет, когда другому инженеру понадобится NAND с 6 входами? Он использует 8-входный вентиль NAND и связывает 2 неиспользуемых входа, что приводит к потере ресурсов кремния и мощности в талии. И так идет вверх по цепочке абстракций. Каждый слой дает нам способ справиться со сложностью,
Теперь сравните эти абстракции с тем, что необходимо для FPGA. По сути, абстракции FPGA останавливаются на # 2 в списке выше. FPGA позволяет разработчикам работать на уровне цифровой логики. Это несколько сложнее, чем это, потому что процессоры «жестко запрограммированы» на этом уровне, и FPGA должны быть сконфигурированы во время выполнения (что, кстати, именно поэтому процессоры обычно работают на более высоких частотах), но важная истина заключается в том, что это далеко немного абстракций для ПЛИС, чем для процессоров.
Итак, почему FPGA может быть быстрее, чем процессор? По сути, это потому, что FPGA использует гораздо меньше абстракций, чем процессор, что означает, что разработчик работает ближе к кремнию. Он не оплачивает стоимость всех многих уровней абстракции, которые требуются для процессоров. Он программирует на более низком уровне и должен работать усерднее, чтобы достичь определенного уровня функциональности, но за вознаграждение он получает более высокую производительность.
Но, конечно, есть и обратная сторона для меньшего количества абстракций. Все эти абстракции процессора есть для этого по уважительной причине. Они дают нам гораздо более простую парадигму кодирования, что означает, что больше людей могут легко разработать для них. Это, в свою очередь, означает, что существует гораздо больше конструкций ЦП, и, следовательно, мы получаем огромную выгоду ЦП / масштаб / время выхода на рынок.
Так что у вас есть это. FPGA имеют меньше абстракций, поэтому они могут быть более быстрыми и более энергоэффективными, но их трудно программировать. Процессоры имеют много абстракций, что делает их простыми в разработке, масштабируемыми и дешевыми. Но они отказываются от скорости и мощи в торговле ради этих выгод.
источник
Хотя все остальные ответы верны, ни один из них еще не рассматривает пример майнинга биткойнов из вашего вопроса, который действительно является достойным примером. Биткойн-майнинг включает в себя многократное вычисление криптографической хеш-функции, SHA-256, в результате другого вычисления SHA-256, данных, в которых изменяется только одно 32-битное целое число, пока результирующий хэш не приобретет определенные свойства. Каждый SHA-256 состоит из 64 повторений одного и того же алгоритма, включающего 32-разрядные сложения, сдвиги битов и некоторые другие операции преобразования битов.
Если вы запрограммируете этот цикл на 32-битном (или более) процессоре, вы обнаружите, что его набор инструкций очень хорошо подходит для этой задачи - SHA-256 был разработан для эффективной работы на процессорах. Тем не менее, вы будете использовать только 2% современной кремниевой области ЦП с функциональными возможностями, интенсивно использующими области, такими как кеширование, умножение, деление, операции с плавающей запятой, предсказание ветвлений и скобок и т. Д., Либо не используются вообще, либо не способны обеспечить значительную повышение производительности для этой конкретной задачи.
В настраиваемом оборудовании, таком как FPGA, вы просто реализуете эти 2% и оптимизируете дальше, забывая о выполнении кода, а скорее проектируете логические элементы для непосредственного вычисления каждой из этих часто повторяющихся подфункций. Конвейерная передача такова, что каждый из них передает результат в каждый следующий тактовый цикл и повторяется 128 раз (и с некоторой специальной дополнительной логикой, где начинается и заканчивается каждый SHA-256), в результате вы получаете результат каждый тактовый цикл (для, возможно, 100 миллионов хэшей в секунду на FPGA, рекламируемой для поддержки 300 МГц с более простой логикой, чем эта), в то время как на современном процессоре можно ожидать одного результата каждые несколько тысяч тактов на ядро, скажем, 10 миллионов хэшей в секунду на многоядерном -ГГц процессор.
Если этот конкретный пример вас интересует, вы можете взглянуть на мой соответствующий ответ о внутренних компонентах майнеров ASIC на bitcoin.stackexchange, поскольку многие майнеры FPGA работают одинаково, используя настраиваемое, а не изготовленное на заказ оборудование. Просто для полноты: есть и другие возможности, такие как ограничение или предотвращение конвейерной обработки, которую я описал, в пользу более тривиального распараллеливания с использованием нескольких независимых хэшей SHA-256. В зависимости от ограничений, установленных внутренними компонентами вашей ПЛИС, и ее общего размера, это может даже дать лучшую производительность, хотя это было бы менее эффективно с точки зрения количества шлюзов и накладных расходов на маршрутизацию, если бы у вас была полная свобода в разработке всего чипа, а не только конфигурации ПЛИС ,
источник
Приведенные выше ответы, хотя и правильные, упускают из виду тот факт, что ПЛИС (и пользовательские ASIC) особенно хороши для расчетов биткойнов.
Реальным преимуществом является то, что большая часть вычислений SHA-256 - это логические операции (например, сдвиги битов), которые можно выполнять в проводке. Когда это сделано таким образом, они требуют 0 тактов.
Другим важным преимуществом является то, что FPGA намного более энергоэффективны (то есть MIPS на ватт), чем процессоры, поэтому количество энергии, необходимой для расчетов, намного меньше. Это важно, потому что стоимость майнинга биткойна зависит от того, сколько электричества вы используете для его производства.
Чипы ASIC более энергоэффективны, чем FPGA, поэтому они могут выполнять тот же код гораздо дешевле. Вы также можете собрать больше исполнительных блоков на борту, чтобы сделать их быстрее. Недостатком является то, что стоимость изготовления специализированной ASIC очень высока, поэтому вам придется продать немало чипов, чтобы покрыть производственные затраты.
Графические процессоры также используются для создания биткойнов, но, поскольку они гораздо менее энергоэффективны, они уступают место ПЛИС и специализированным интегральным схемам.
источник