Подавляющее большинство разработчиков прикладного программного обеспечения фиксируют свои проекты на языке высокого уровня (HLL), таком как C или C ++. Затем они компилируют эти приложения для запуска на платформе на базе ЦП, такой как настольный компьютер или сервер X86, или на встроенном процессоре ARM.

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

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

Для сравнения, FPGA фантастически эффективна для такого рода задач, потому что она может обрабатывать данные массово параллельным образом. В случае нашего примера добавления массива мы могли бы использовать FPGA для реализации 100 x 100 = 10 000 сумматоров и выполнять все добавления за один такт.

Использование FPGA сложно (для разработчиков программного обеспечения)

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

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

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

Представляем платформу ускорения QCC

Чтобы решить эту проблему, новая компания под названием CacheQ только что анонсировала то, что они называют платформой ускорения QCC. Эта платформа предназначена для того, чтобы позволить разработчикам программного обеспечения с ограниченными знаниями об аппаратной архитектуре использовать преимущества FPGA для обеспечения 100-кратного увеличения производительности при 15-кратном сокращении времени разработки.

Разработчики программного обеспечения записывают свои приложения на языке высокого уровня. На момент написания этой статьи поддерживается только C, но в ближайшее время ожидается поддержка C ++ и других HLL. Затем приложение загружается в компилятор на основе LLVM и генератор виртуальных машин (ВМ) для создания виртуальной машины CacheQ.

Используя платформу QCC Acceleration Platform, разработчики программного обеспечения могут профилировать свой код, чтобы находить и идентифицировать любые узкие места. С помощью графического пользовательского интерфейса (GUI) разработчики могут определить, какие функции они хотят ускорить, а система предоставит им интерактивную обратную связь относительно требований к ресурсам и производительности приложений.

Когда разработчики разделят и оптимизируют виртуальную машину, система сгенерирует код C ++ для развертывания в процессоре (ах) X86 на материнской плате и код SystemVerilog для развертывания в FPGA на дочерней карте (ах).

Система также может генерировать встроенный код C ++ для развертывания в ядрах процессоров ARM на SoC. Поддержка графических процессоров (GPU) продолжается. Также доступна демонстрация разделения приложения таким образом, что одна часть выполняется на мобильном устройстве, таком как смартфон, а другая часть - в облаке.

Хочу один?

Платформа QCC Acceleration Platform сейчас поставляется в ограниченном количестве и станет общедоступной в четвертом квартале 2019 года. Первоначальный выпуск поддерживает платы ускорителей FPGA от Alpha Data, Bittware и Xilinx. Поддержка процессоров и плат FPGA System-on-Chip (FPGA SoC) будет доступна позже в этом году.