2017/12/19 11:33:06

Ускорители вычислений: у графических процессоров появилась серьезная альтернатива

Используемая для ускорения вычислений связка CPU Intel Xeon с GPU от Nvidia в начале XXI века стала рассматриваться как стандарт «де-факто». Но время идет и одним из нескольких признаков изменяющейся ситуации стало появление программируемых пользователем вентильных матриц FPGA (Field-Programmable Gate Frray) в качестве альтернативы GPU.

FPGA намного старше GPU, этот сегмент образовался в конце восьмидесятых годов XX века и был практически монополизирован четырьмя производителями. Среди них два признанных лидера - компания Altera, основанная в 1983 году и в 2015 году купленная Intel, и Xilinx, основанная на два года позже. По состоянию на 2017 год им принадлежит 31% и 36% рынка FPGA соответственно. Есть еще два крупных вендора - Microsemi и купленная ей в 2010 году Actel.

Росс Фриман, изобретатель FPGA (справа на снимке) - автор идей программирования готовых изделий и полупроводниковой компании, не имеющей собственного производства (fabless)


Исторически появлению FPGA предшествовали программируемые логические массивы PLA (Programmable Logic Arrays) и устройства на сложных программируемых массивах CPLD (Complex Programmable Logic Devices). Отличие FPGA от PLA и CPLD как количественное, так и качественное - они не обладали достаточной гибкостью.Как DevOps-сервис помогает «разгрузить» высоконагруженные системы BPMSoft 2.3 т

Традиционные массивы FPGA состоят из множества связанных между собой достаточно простых блоков, способных выполнять те или иные логические операции (скажем, AND и XOR), и маршрутизирующих каналов, которые осуществляют связь между блоками. Маршрутизация каналов и сами блоки являются программируемыми, программирование в данном контексте сводится к созданию таблиц истинности LUT для блоков и маршрутов, по которым блоки обмениваются данными.

В каноническом варианте FPGA состоят из миллионов одинаковых блоков, состояние которых отражается в таблицах LUT (Lookup Table). LUT размещается в небольшом программируемом фрагменте памяти, куда записывается логическая функция блока. Контролер связывает блоки и маршрутизацию в единую систему.

Рис. 1 Блоки FPGA и LUT с тремя входами


По мере развития FPGA архитектура блоков усложняется, увеличивается количество входов до 8 и более, что позволяет запрограммировать более сложную логику. В самых новых FPGA блоки бывают еще сложнее, они реализуют не простую логику, а какие-то специализированные функции. Такие сложные блоки называют sliсе, то есть ломтик или срез. Блоки этого типа работают быстрее, чем сборка их простейших боков. В качестве примеров специализированных блоков можно назвать мультипликаторы или сигнальные процессоры DSP. Если умножение 32-битовых чисел, реализованное на простых блоках, потребует выполнения примерно 2000 операций, то специализированному блоку для этого потребуется всего одна операция. Номенклатура специализированных срезов постоянно расширяется.


Рис. 2 Специализированные блоки FPGA


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

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

Объективное сравнение GPU и FPGA по производительности еще затруднено тем, что они отличаются по природе и для них используются разные тесты, а результаты выражаются в случае GPU в хорошо известных флопсах в то время как для FPGA в менее известных максах (MACS, Multiply-Accumulate Operations per Second). Более широкая, комплексная оценка по девяти параметрам (рис. 4) дает счет 5:4 в пользу GPU, но этот счет можно интерпретировать по-разному.

Рис. 3 Сравнение эффективности GPU и FPGA по удельной производительности вычисления на ватт и вычисления на евро


Рис. 4 Сравнение эффективности GPU и FPGA по 9-ти параметрам


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

Достоинством GPU служит большая гибкость, лучшая приспособленность к выполнению операций с плавающей точкой, поддержка старых версий ПО.

Однако, несмотря на отсутствие строгой аргументации, Microsoft и Intel отдают предпочтения FPGA. Не исключено, что перевес на чаше FPGA вызван наблюдаемым в последнее время существенным снижением стоимости этих устройств. FPGA становятся доступными для установки в серийные изделия. Раньше по причине высокой стоимости FPGA использовались только при разработке новых систем, на этапе макетирования, после чего реализованные в них алгоритмы переносили на специализированные интегральные схемы ASIC (Application Specific Integrated Circuit). В серийных изделиях уже устанавливали ASIC, но при этом они теряли возможность перепрограммирования «в поле». Так было раньше, но по состоянию на 2017 год нет причин, чтобы не комплектовать и серийные устройства модулями FPGA. Нетрудно представить, что последует из возможности сохранения перепрограммирования, например, в компьютерах, ориентированных на машинное обучение и других аналогичных приложениях.

Осознавая значение FPGA, корпорация Intel в 2015 году купила компанию Altera, после чего ее видение процессоров стало выглядеть примерно так, как показано на рис. 5. Хотя в 2017 году появилось новое семейство процессоров Xeon Scalable и платформа Purley, а шину QPI заменила новая версия UPI. К тому же появилась новая память, но суть осталась неизменной – есть CPU и есть FPGA, служащие в качестве ускорителей.


Рис 5. Процессоры Intel c укорителями на FPGA


Особую привязанность к FPGA демонстрирует Microsoft, где с 2010 года разрабатывается проект с амбициозным названием Catapult. Целью этого метательного снаряда является создании конфигурируемого облака (Configurable Cloud), а средством для достижения этой цели служит гипермасштабируемая ускоряющая структура (hyperscale acceleration fabric). Fabric, в данном случае, переводится именно как структура, а не фабрика.

FPGA в Configurable Cloud используются в двух качествах. Первое – в качестве канальных ускорителей, того, что называют bump-in-the-wire, размещенных между сетевыми интерфейсными картами NIC коммутаторами в стойке (top-of-rack switch, ToR). Во втором качестве FPGA служат ускорителями в серверах, предназначенных для определенного класса задач, таких как биоинформатика, ранжирование в поиске, глубинное обучение или тяжелые вычисления. Для них используются одинаковые серверы, но с различными программами (прошивками) в FPGA.

Рис. 6 Configurable Cloud от Microsoft


В отличие от Altera, слившейся с Intel, компания Xilinx занимает самостоятельную позицию, она поставляет крупным гиперскейлерам (Huawei, Baidu) стек продуктов (FPGA-powered Xilinx Reconfigurable Acceleration Stack), поддерживающий сервисы, получившие название FPGA-as-a-Service.

Рис. 7 Место Xilinx Reconfigurable Acceleration Stack в квадранте с осями «Application breadh» (разнообразие приложений) и «Accelerator utilization» (использование ускорителя)

Сервисы включают библиотеки, конструкции для интеграции (framework integrations), инструменты для разработчиков (developer boards) и поддержку OpenStack.