Реализация компилятора реального времени на FPGA - PullRequest
10 голосов
/ 06 июня 2011

Мне любопытно услышать мнение людей о том, как трудно было бы реализовать компилятор на ПЛИС.Это может быть просто компилятор backend , например, LLVM, а реализация будет просто принимать LLVM IR и выводить машинный код.

Цель этого - позволить - так сказать- выполнение в реальном времени исходного кода (или промежуточного кода представления) в том смысле, что вы:

  1. Сконфигурируете FPGA для компиляции для определенного языка (например, C)
  2. Подайте компилятору исходный код вашей программы
  3. Вывод (машинного кода) компилятора поступает непосредственно в ЦП и выполняется

Для данной системы:более или менее статической частью FPGA может быть серверная часть LLVM, т.е.часть, которая решает, какой тип машинного кода выводить, например, x86-64 с SSE4.Или ARM Thumb-2 с инструкциями NEON и VFP.Если у вас нет системы с несколькими процессорами, это не изменится.Это не должно быть полностью статичным, и, следовательно, не должно реализовываться аппаратно, потому что оптимизация компилятора выполняется постоянно, и время от времени его нужно будет обновлять.Более часто изменяемой частью FPGA будет интерфейсная часть, часть, которая производит IR LLVM из заданного языка: C, C ++, Vala и т. Д.

Изящная вещь в этой системе заключается в том, чтокод всегда оптимизирован для процессора в системе под рукой.В текущей ситуации лишь немногие сборки используют все дополнительные функциональные возможности процессоров: SSE, AVX, 3DNow !, Neon, VFP.Используя этот (полностью гипотетический) подход, можно использовать весь потенциал процессоров, компилируя для конкретной архитектуры в режиме реального времени и выполняя полученные инструкции сразу после этого.Это было бы особенно полезно в системах на основе ARM, где нам нужен весь сок, который мы можем выжать из процессоров, а сам процессор очень медленно выполняет компиляцию.

Я знаю, что можно настроить gccиспользовать потоки, и я бы предположил, что распараллеливание компилятора было бы относительно легко.Т.е., просто компилируя все исходные файлы параллельно.

Мы также могли бы отказаться от внешнего интерфейса - специфичной для языка программирования части компилятора - и просто распространять программы в виде промежуточного кода представления, такого как LLVM IR.

Возможно ли это как-нибудь?

Ответы [ 4 ]

2 голосов
/ 06 июня 2011

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

1 голос
/ 18 июня 2011

У меня тоже была такая же идея некоторое время назад.

Реализация такой сложной программы на ПЛИС возможна при наличии адекватной технологии синтеза. Использование поведенческого синтеза (от C до HDL synthis) делает это возможным.

Самое смешное в этом то, что если выход вашего компилятора также является HDL, то можно представить, что он запускает поведенческий синтезатор (то есть заставляет его синтезировать себя), что обычно является важным этапом проверки для компилятора.

1 голос
/ 06 июня 2011

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

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

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

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

0 голосов
/ 10 июля 2015

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

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

Этот разговор действительно заставил меня критически подумать о компромиссах, связанных с использованием универсальных инструментов, как в аппаратном, так и в программном обеспечении.

...