Как FPGA может превзойти процессор?


55

Я слышал о людях, использующих ПЛИС для улучшения производительности систем, которые занимаются такими вещами, как добыча монет, электронная торговля и сворачивание белков.

Как FPGA может конкурировать с процессором по производительности, если процессор обычно работает как минимум на порядок быстрее (с точки зрения тактовой частоты)?


13
FPGA делает все сразу.
Игнасио Васкес-Абрамс

Ответы:


48

ЦП являются устройствами последовательной обработки. Они разбивают алгоритм на последовательность операций и выполняют их по одному.

ПЛИС являются (или могут быть сконфигурированы как) устройствами параллельной обработки. Весь алгоритм может быть выполнен за один такт, или, в худшем случае, гораздо меньше тактов, чем последовательный процессор. Одна из издержек, связанных с повышенной сложностью логики, - это, как правило, более низкий предел, при котором устройство может быть синхронизировано.

Принимая во внимание вышесказанное, ПЛИС могут превосходить ЦП при выполнении определенных задач, потому что они могут выполнять ту же задачу за меньшее количество тактов, хотя и с более низкой общей тактовой частотой. Усиления, которые могут быть достигнуты, сильно зависят от алгоритма, но, по крайней мере, порядок величины не является нетипичным для чего-то вроде БПФ.

Кроме того, поскольку вы можете встроить несколько модулей параллельного выполнения в ПЛИС, если у вас большой объем данных, которые вы хотите передать по одному и тому же алгоритму, вы можете распределить данные между модулями параллельного выполнения и получить еще на несколько порядков более высокую пропускную способность. чем это может быть достигнуто даже с многоядерным процессором.

Цена, которую вы платите за преимущества, - это энергопотребление и $$$.


2
+1; Однако FPGA не так динамичны, как процессоры, поэтому процессоры обычно лучше подходят для ПК
Ник Уильямс,

17
«Цена, которую вы платите за преимущества, - это энергопотребление и $$$». - Это часто так, но вы можете просто выиграть у мощной машины Intel Xeon стоимостью $ 1000 с недорогим Xilinx Spartan-6 стоимостью $ 50 для многих алгоритмов. Но это обычно занимает много времени разработки, и вы можете получить очень индивидуальный дизайн, который работает только для одного приложения и трудно изменить. Таким образом, компромисс - это не только сила и деньги, но и время разработки алгоритма, возможность повторного использования и гибкость. (Хотя вы можете поспорить время == деньги.)
WJL

Markt, о вашем последнем предложении, разве FPGA не намного меньше, чем процессоры? Существует широкий спектр устройств как для процессоров, так и для FPGA, но если мы посмотрим на те, которые используются для таких вещей, как добыча битовых монет, разве процессоры, используемые для этих задач, не потребляют гораздо больше энергии, чем FPGA, которые были бы используемый?
Дэвид Гарднер

4
@ Дэвид: когда речь идет о майнинге биткойнов, уместным показателем является количество хешей на ватт. Маркт говорит об общем энергопотреблении. То есть данная FPGA может потреблять в 3 раза больше мощности, чем типичный процессор, но при майнинге биткойнов может быть более чем в 3 раза быстрее; так что для Биткойна это победа.
Билли Онил

2
@Billy: количество хешей на ватт · секунду, а не на ватт.
Paŭlo Ebermann

34

У Маркта это в основном верно, но я собираюсь добавить сюда свои 2 цента:

Представьте, что я сказал вам, что хочу написать программу, которая меняет порядок бит внутри 32-разрядного целого числа. Что-то вроде этого:

int reverseBits(int input) {
    output = 0;
    for(int i = 0;i < 32;i++) {
        // Check if the lowest bit is set
        if(input & 1 != 0) {
            output = output | 1; // set the lowest bit to match in the output!
        }

        input = input >> 1;
        output = output << 1;
    }
    return output;
}

Теперь моя реализация не элегантна, но я уверен, что вы согласны с тем, что для этого потребуется некоторое количество операций и, возможно, какой-то цикл. Это означает, что в ЦП вы потратили много больше, чем 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,


2
Для примера обращения битов (и всех других задач обмена / выбора битов) на самом деле не требуется 1 тактовый цикл, это занимает 0. В вашем примере для хранения данных в защелке требуется 1 тактовый цикл , который не является та же операция. Требуется 1 тактовый цикл независимо от того, поменяете ли вы биты или нет. Операция обращения битов составляет 0 тактов; никаких накладных расходов, просто другая маршрутизация. Разница не только в семантике, особенно когда вы начинаете добавлять вещи. Например, сколько времени потребуется, чтобы сдвинуть 32-битное слово на 3 бита, затем поменять местами любой другой клочок, а затем повернуть его вспять?
WJL

1
«Гибридный модуль FPGA-CPU» - они были на рынке в течение долгого времени (см. xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm для современного успешного), но даже без специальная поддержка, объединяющая программное обеспечение и HDL, обычно осуществляется путем реализации мягкого ЦП внутри ПЛИС на матрице.
WJL

@wjl Вы правы, что технически не требуется никаких циклов для выполнения самой операции. Я бы сказал, что ваш пример только семантически отличается, в основном потому, что выполнение этих трех операций логически переводит в фиксированный битовый шаблон (т.е. я начинаю с b1b2b3b4, а заканчиваю b3b1b4b2). Это была моя точка зрения во всем ответе. Я пытался указать на то, что описание операции как серии шагов часто необходимо только в том случае, если у вас есть фиксированный набор команд / схема доступа.
Kit Scuzz

@wjl: Давид-Гарднер, задавая вопрос, похоже, говорит, что «процессор» эквивалентен процессору Intel или AMD x86 / x86_64 с высокой тактовой частотой, конвейерным и оптимизированным процессором. Существует много мягких «процессоров», но я не могу работать с тактовой частотой, аналогичной i7, ни на одном из тех, которые предназначены для работы в ПЛИС, и не настолько оптимизированы или способны. Что касается гибридов, я больше имел в виду что-то вроде этого: newsroom.intel.com/docs/DOC-1512, который, очевидно, существует
Kit Scuzz

1
Zynq на самом деле не так уж плох в процессоре (ARM Cortex-A9 - то же самое, что планшетные компьютеры и т. д.), но я согласен, что было бы гораздо лучше иметь интегрированную ПЛИС с высокой скоростью x86_64. =)
1/16

25

Все другие популярные ответы, представленные здесь, говорят о буквальных различиях между ПЛИС и процессорами. Они указывают на параллельную природу FPGA по сравнению с последовательной природой CPU или приводят примеры того, почему определенные алгоритмы могут хорошо работать на FPGA. Все это хорошо и верно, но я бы сказал, что между процессорами и FPGA есть более фундаментальная разница.

Какой общий знаменатель между ПЛИС и процессором? Это то, что они оба построены на основе кремния. А в некоторых случаях буквально одни и те же кремниевые процессы.

Принципиальное отличие - это абстракции, которые мы накладываем поверх этого кремния. Один человек не может понять всех деталей единой современной конструкции ЦП, от кремниевой до упакованной ИС. Поэтому, как часть процесса разработки, мы делим эту сложную проблему на более мелкие управляемые проблемы, которые люди могут обернуть вокруг себя.

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

  1. Сначала у нас есть инженеры, которые знают, как создавать транзисторы из кремния. Они знают, как проектировать крошечные транзисторы, которые потребляют мощность и переключаются с частотой 10 или даже 100 гигагерц, и они знают, как проектировать мощные транзисторы, которые могут управлять сигналами с достаточной мощностью, чтобы отправлять их из пакета IC и через плату. на другой чип.

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

  3. Затем у нас есть различные группы инженеров, которые знают, как соединить эти цифровые (а иногда и аналоговые) блоки в функциональные блоки более высокого уровня, такие как высокоскоростные приемопередатчики, контроллеры памяти, предсказатели ветвлений, ALU и т. Д.

  4. Затем у нас есть разработчики ЦП для проектирования высокопроизводительных ЦП, объединяя эти функциональные блоки в единую систему.

И это не останавливается там. На данный момент у нас есть работающий процессор, который выполняет ассемблерный код, но это не тот язык, на котором большинство программистов пишут в наши дни.

  1. У нас может быть компилятор C, который компилирует в ассемблерный код (возможно, через некоторое промежуточное представление)
  2. Мы могли бы добавить еще одну абстракцию поверх C, чтобы получить объектно-ориентированный язык
  3. Мы могли бы даже написать Виртуальную машину поверх C или C ++, чтобы мы могли интерпретировать такие вещи, как байт-код Java

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

ОДНАКО, важно отметить, что каждая абстракция также несет свою стоимость. Конструктор транзисторов не создает идеальный транзистор для каждого случая использования. Он создает разумную библиотеку, и поэтому иногда используется транзистор, который потребляет немного больше энергии или немного больше кремния, чем на самом деле необходимо для работы. И точно так же разработчики логики не строят все возможные логические ячейки. Они могут построить вентиль NAND с 4 входами и вентиль NAND с 8 входами, но что произойдет, когда другому инженеру понадобится NAND с 6 входами? Он использует 8-входный вентиль NAND и связывает 2 неиспользуемых входа, что приводит к потере ресурсов кремния и мощности в талии. И так идет вверх по цепочке абстракций. Каждый слой дает нам способ справиться со сложностью,

Теперь сравните эти абстракции с тем, что необходимо для FPGA. По сути, абстракции FPGA останавливаются на # 2 в списке выше. FPGA позволяет разработчикам работать на уровне цифровой логики. Это несколько сложнее, чем это, потому что процессоры «жестко запрограммированы» на этом уровне, и FPGA должны быть сконфигурированы во время выполнения (что, кстати, именно поэтому процессоры обычно работают на более высоких частотах), но важная истина заключается в том, что это далеко немного абстракций для ПЛИС, чем для процессоров.

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

Но, конечно, есть и обратная сторона для меньшего количества абстракций. Все эти абстракции процессора есть для этого по уважительной причине. Они дают нам гораздо более простую парадигму кодирования, что означает, что больше людей могут легко разработать для них. Это, в свою очередь, означает, что существует гораздо больше конструкций ЦП, и, следовательно, мы получаем огромную выгоду ЦП / масштаб / время выхода на рынок.

Так что у вас есть это. FPGA имеют меньше абстракций, поэтому они могут быть более быстрыми и более энергоэффективными, но их трудно программировать. Процессоры имеют много абстракций, что делает их простыми в разработке, масштабируемыми и дешевыми. Но они отказываются от скорости и мощи в торговле ради этих выгод.


Кроме того, FPGA разработаны с использованием простых повторяющихся блоков, которые предназначены для выполнения простых логических задач. Они специально созданы для определенных типов задач. Процессоры, OTOH, имеют много сложных функциональных частей, которые делают разные вещи. Можно подумать, что CPU - это группа множества различных FPGA-подобных устройств (в конце концов, это всего лишь кремний, электроника и математика). Так что дело не в абстракциях, а в сложности. Процессоры представляют собой сложные устройства, состоящие из множества различных типов электрических устройств, в то время как FPGA состоит из нескольких. Процессор - дробовик, а ПЛИС - винтовка.
АннотацияДиссонанс

21

Хотя все остальные ответы верны, ни один из них еще не рассматривает пример майнинга биткойнов из вашего вопроса, который действительно является достойным примером. Биткойн-майнинг включает в себя многократное вычисление криптографической хеш-функции, 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. В зависимости от ограничений, установленных внутренними компонентами вашей ПЛИС, и ее общего размера, это может даже дать лучшую производительность, хотя это было бы менее эффективно с точки зрения количества шлюзов и накладных расходов на маршрутизацию, если бы у вас была полная свобода в разработке всего чипа, а не только конфигурации ПЛИС ,


3
Это очень хорошая точка зрения об использовании кремния.
Маркт

Но, возможно, (непреднамеренно!) Вводит в заблуждение, учитывая, что FPGA состоит из несколько сложных ячеек со многими физическими элементами, из которых типичное приложение снова использует только дробь, позволяя их производителям рекламировать эквивалентное число элементов в попытке сказать вам, сколько всего это может стоить в «типичном» приложении ...
пирамиды

3

Приведенные выше ответы, хотя и правильные, упускают из виду тот факт, что ПЛИС (и пользовательские ASIC) особенно хороши для расчетов биткойнов.

Реальным преимуществом является то, что большая часть вычислений SHA-256 - это логические операции (например, сдвиги битов), которые можно выполнять в проводке. Когда это сделано таким образом, они требуют 0 тактов.

Другим важным преимуществом является то, что FPGA намного более энергоэффективны (то есть MIPS на ватт), чем процессоры, поэтому количество энергии, необходимой для расчетов, намного меньше. Это важно, потому что стоимость майнинга биткойна зависит от того, сколько электричества вы используете для его производства.

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

Графические процессоры также используются для создания биткойнов, но, поскольку они гораздо менее энергоэффективны, они уступают место ПЛИС и специализированным интегральным схемам.


Если вы посмотрите на алгоритм хэширования Monero, известный как cryptonight, вы увидите, что реализация FPGA практически невозможна из-за большого объема памяти, необходимого для случайного доступа (2 МБ). Процессор имеет преимущество в этом случае.
lucas92
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.