Как FPGA может опередить процессор?

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

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

47 голосов | спросил David Gardner 2 MaramSun, 02 Mar 2014 06:45:12 +04002014-03-02T06:45:12+04:0006 2014, 06:45:12

5 ответов


21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ответил David Gardner 20 J0000006Europe/Moscow 2015, 22:37:01
42

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

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

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

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

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

ответил markt 2 MaramSun, 02 Mar 2014 06:55:36 +04002014-03-02T06:55:36+04:0006 2014, 06:55:36
32

Markt имеет это в основном правильно, но я собираюсь бросить свои 2 цента здесь:

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

  int reverseBits (int input) {
    output = 0;
    для (int i = 0; i <32; i ++) {
        //Проверяем, установлен ли самый младший бит
        if (input & amp; 1! = 0) {
            output = output | 1; //задаем самый младший бит для вывода в выходном файле!
        }

        input = input> 1;
        выход = выход <1;
    }
    обратный выход;
}
 

Теперь моя реализация не изящна, но я уверен, что вы согласны с тем, что для этого потребуется некоторое количество операций и, вероятно, какой-то цикл. Это означает, что в CPU вы потратили более 1 цикла для реализации этой операции.

В FPGA вы можете просто подключить это как пару защелок. Вы получаете данные в какой-то регистр, затем вы подключаете их в другой регистр в обратном порядке бит. Это означает, что операция завершится за один такт в FPGA. Таким образом, за один цикл FPGS завершил операцию, в результате которой ваш процессор общего назначения заработал много тысяч циклов! Кроме того, вы можете подключить, вероятно, несколько сотен этих регистров параллельно. Поэтому, если вы можете переместиться на несколько сотен номеров на FPGA, за один цикл он завершит эти тысячи операций в сотни раз, все в 1 такте FPGA.

Есть много вещей, которые может делать процессор общего назначения, но в качестве ограничения мы настраиваем обобщенные и простые инструкции, которые обязательно должны расширяться в списки простых инструкций для выполнения некоторых задач. Поэтому я мог бы сделать CPU общего назначения такой командой, как «порядок обратного бита для 32-битного регистра», и дать CPU такую ​​же возможность, что и FPGA, которую мы только что создали, но существует бесконечное количество таких возможных полезных инструкций, и поэтому мы вставлять только те, которые гарантируют стоимость популярных процессоров.

FPGA, CPLD и ASIC дают вам доступ к необработанному оборудованию, которое позволяет вам определять сумасшедшие операции, такие как «дешифровать зашифрованные байты AES256 с ключом» или «декодировать кадр видео h.264». У них есть задержки более одного такта в FPGA, но они могут быть реализованы гораздо эффективнее, чем запись операции в миллионах строк кода сборки общего назначения. Это также позволяет сделать FPGA /ASIC с фиксированным назначением для многих из этих операций более энергоэффективными, потому что им не нужно делать столько посторонней работы!

Параллелизм - это еще одна часть, о которой отметил Маркт, и в то время как это важно также, главное, когда ПЛИС распараллеливает то, что было уже дорого в ЦП с точки зрения циклов, необходимых для выполнения операции. Как только вы начнете говорить: «Я могу выполнить в 10 циклах FPGA задачу, которая занимает мой процессор 100 000 циклов, и я могу выполнять эту задачу параллельно по 4 элемента за раз», вы можете легко понять, почему FPGA может быть чертовски много быстрее, чем процессор!

Итак, почему мы не используем FPGA, CPLD и ASIC для всего? Потому что в целом это целый чип, который выполняет только одну операцию. Это означает, что, хотя вы можете заставить процесс запускать на несколько порядков быстрее в вашей FPGA /ASIC, вы не сможете изменить его позже, когда эта операция больше не будет полезна. Причина, по которой вы не можете (вообще) изменить FPGA, когда она находится в цепи, - это то, что проводка для интерфейса фиксирована, и обычно схема не включает компоненты, которые позволят вам перенастроить FPGA в более полезную конфигурацию. Некоторые исследователи пытаются создать гибридные модули FPGA-CPU, где есть раздел процессора, который может быть перепрограммирован /перепрограммирован как FPGA, что позволяет вам «загружать» эффективный раздел CPU, но ни один из этих когда-либо выходили на рынок (насколько мне известно).

ответил Kit Scuzz 2 MaramSun, 02 Mar 2014 11:11:08 +04002014-03-02T11:11:08+04:0011 2014, 11:11:08
20

В то время как другие ответы правильны, ни один из них не рассматривает пример использования биткойна из вашего вопроса, что действительно является достойным примером. Bitcoin mining включает в себя многократное вычисление криптографической хэш-функции SHA-256 результата другого вычисления SHA-256 данных, в которых изменяется только одно 32-битное целое число, до тех пор, пока результирующий хеш не будет иметь определенных свойств. Каждый SHA-256 состоит из 64 повторений одного и того же алгоритма, включающих в себя 32-битные дополнения, бит-сдвиги и некоторые другие операции с битовыми манипуляциями.

Если вы запрограммируете этот цикл на 32-разрядном (или более) процессоре, вы найдете его набор команд, очень хорошо подходящий для задачи --- SHA-256 был разработан для эффективной работы на процессорах. Тем не менее, вы будете использовать только 2% современной кремниевой области процессора, с такими интенсивными областями функциями, как кеширование, умножение, деление, операция с плавающей точкой, разветвление и предсказание на плечах и т. Д., Либо не используемые вообще, либо неспособные обеспечить значительную повышение производительности для этой конкретной задачи.

В конфигурируемом аппаратном обеспечении, таком как FPGA, вы просто реализуете только эти 2% и оптимизируете дальше, забывая все о выполнении кода, а также проектируете ворота, чтобы напрямую вычислить каждую из часто повторяющихся подфункций. Конвейерно сконфигурированный таким образом, что каждый из них передает результат в следующий каждый циферблат часов и повторяется 128 раз (и с некоторой дополнительной дополнительной логикой, где каждый SHA-256 начинается и заканчивается), вы получаете результат каждый такт (возможно, 100 миллионов хэшей в секунду на FPGA, рекламируемом для поддержки 300 МГц на более простой логике, чем это), в то время как на современном процессоре вы можете ожидать один результат каждые несколько тысяч тактовых циклов на ядро, например, 10 миллионов хэшей в секунду на многоядерном мульти -GHz.

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

ответил pyramids 2 MarpmSun, 02 Mar 2014 18:16:23 +04002014-03-02T18:16:23+04:0006 2014, 18:16:23
3

Ответы выше, хотя и правильные, не учитывают, почему FPGA (и пользовательские ASIC) особенно хороши для вычислений биткойнов.

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

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

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

Графические процессоры

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

ответил 0xc000005 4 PMpSat, 04 Apr 2015 14:07:43 +030007Saturday 2015, 14:07:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132