Ускорители вычислений: у графических процессоров появилась серьезная альтернатива
Используемая для ускорения вычислений связка 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 предшествовали программируемые логические массивы PLA (Programmable Logic Arrays) и устройства на сложных программируемых массивах CPLD (Complex Programmable Logic Devices). Отличие FPGA от PLA и CPLD как количественное, так и качественное - они не обладали достаточной гибкостью.«Группа Астра» в свободном доступе опубликовала курс по российской службе каталога ALD Pro для обучения администраторов
Традиционные массивы FPGA состоят из множества связанных между собой достаточно простых блоков, способных выполнять те или иные логические операции (скажем, AND и XOR), и маршрутизирующих каналов, которые осуществляют связь между блоками. Маршрутизация каналов и сами блоки являются программируемыми, программирование в данном контексте сводится к созданию таблиц истинности LUT для блоков и маршрутов, по которым блоки обмениваются данными.
В каноническом варианте FPGA состоят из миллионов одинаковых блоков, состояние которых отражается в таблицах LUT (Lookup Table). LUT размещается в небольшом программируемом фрагменте памяти, куда записывается логическая функция блока. Контролер связывает блоки и маршрутизацию в единую систему.
По мере развития FPGA архитектура блоков усложняется, увеличивается количество входов до 8 и более, что позволяет запрограммировать более сложную логику. В самых новых FPGA блоки бывают еще сложнее, они реализуют не простую логику, а какие-то специализированные функции. Такие сложные блоки называют sliсе, то есть ломтик или срез. Блоки этого типа работают быстрее, чем сборка их простейших боков. В качестве примеров специализированных блоков можно назвать мультипликаторы или сигнальные процессоры DSP. Если умножение 32-битовых чисел, реализованное на простых блоках, потребует выполнения примерно 2000 операций, то специализированному блоку для этого потребуется всего одна операция. Номенклатура специализированных срезов постоянно расширяется.
FPGA наравне с GPU могут быть использованы для ускорения обработки изображений, облачного компьютинга, широкополосных коммуникаций, больших данных, роботов и других. В сети можно найти немало материалов, противопоставляющих GPU и FPGA. Опубликованы итоги многочисленных сравнительных тестирований, но трудно быть уверенным в том, что полученные результаты абсолютно объективны.
В качестве ускорителей и у GPU, и у FPGA есть собственные преимущества и недостатки, имеющие исторические и архитектурные корни. Графические процессоры родом из игровых компьютеров, они будучи ширпотребом выпускаются давно и большими тиражами, что обеспечивает относительно низкую цену. Программируемые массивы использовались чаще всего в военных приложениях, где цена - не главный критерий. Зато FPGA более эффективно используют транзисторную массу. Отсюда следует, что преимущество GPU в более высокой производительности в пересчете на цену, но FPGA обладают существенно лучшей энергетической эффективностью.
Объективное сравнение GPU и FPGA по производительности еще затруднено тем, что они отличаются по природе и для них используются разные тесты, а результаты выражаются в случае GPU в хорошо известных флопсах в то время как для FPGA в менее известных максах (MACS, Multiply-Accumulate Operations per Second). Более широкая, комплексная оценка по девяти параметрам (рис. 4) дает счет 5:4 в пользу GPU, но этот счет можно интерпретировать по-разному.
До тех пор, пока не накоплен достаточный опыт, в оценках приходится ограничиваться умозрительными сравнениями. К числу плюсов 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, служащие в качестве ускорителей.
Особую привязанность к 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.
В отличие от Altera, слившейся с Intel, компания Xilinx занимает самостоятельную позицию, она поставляет крупным гиперскейлерам (Huawei, Baidu) стек продуктов (FPGA-powered Xilinx Reconfigurable Acceleration Stack), поддерживающий сервисы, получившие название FPGA-as-a-Service.
Сервисы включают библиотеки, конструкции для интеграции (framework integrations), инструменты для разработчиков (developer boards) и поддержку OpenStack.