JIT-компиляторы для математики - PullRequest
8 голосов
/ 25 октября 2010

Я ищу компилятор JIT или небольшую библиотеку компиляторов, которую можно встроить в мою программу. Я использую его для компиляции динамически генерируемого кода, который выполняет арифметику комплексных чисел. Сгенерированный код очень прост по своей структуре: без циклов, без условных выражений, но они могут быть довольно длинными (несколько МБ при компиляции GCC). Производительность полученного машинного кода важна, хотя меня не волнует скорость самой компиляции. Какой JIT-компилятор лучше всего подходит для моих целей? Спасибо!

Подробные требования

  • Поддержка двойной точности арифметики комплексных чисел
  • Поддержка базовой оптимизации
  • Поддержка многих процессоров (по крайней мере, x86 и x86-64)
  • Использовать SSE на поддерживаемых процессорах
  • Поддержка стека или большой набор регистров для локальных переменных
  • Интерфейс ANSI-C или C ++
  • Кроссплатформенность (в основном Linux, Unix)

Ответы [ 3 ]

7 голосов
/ 25 октября 2010

Возможно, вы захотите взглянуть на LLVM .

3 голосов
/ 25 октября 2010

Cint - это среда c ++ ( ish ), которая предлагает возможность смешивать скомпилированный код и интерпретируемый код.Для интерпретатора есть набор инструментов оптимизации . ROOT расширяет это еще больше, поддерживая компиляцию и ссылку во время выполнения (см. Последний раздел http://root.cern.ch/drupal/content/cint-prompt),, хотя, похоже, он использует системный компилятор и, следовательно, может не помочь.Весь код имеет открытый исходный код.

Я регулярно использую все эти функции в своей работе.

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


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

0 голосов
/ 25 октября 2010

Звучит так, будто вы хотите иметь возможность компилировать на лету, а затем динамически загружать скомпилированную библиотеку (.DLL или .so). Это даст вам лучшую производительность с интерфейсом ANSI-C или C ++. Итак, забудьте о JITing и подумайте над созданием компилятора C / C ++ для выполнения компиляции.

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

...