Способы сделать программу D быстрее

Я работаю над очень сложным проектом (на самом деле интерпретатором), написанным исключительно на D, и мне интересно, какой тип оптимизации обычно рекомендуется. В проекте интенсивно используются сборщики мусора, классы, ассоциативные массивы и многое другое.

Что касается компиляции, я уже экспериментировал с флагами DMD и LDC и LDC с -flto=full -O3 -Os -boundscheck=off кажется, имеет значение.

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

1 ответ

Решение
  • Флаги компилятора: я бы добавил -mcpu=nativeесли программа будет работать на вашем компьютере. Не уверен, какой эффект-Os в дополнение к -O3.

  • Профилирование упоминалось в комментариях. Лично под Linux у меня есть сценарий, который сбрасывает трассировку стека процесса, и я делаю это несколько раз, чтобы понять, где он зависает.

  • Не уверен, что вы имеете в виду под GS.

  • Поскольку вы упомянули классы: в D методы по умолчанию являются виртуальными; виртуальные методы добавляют косвенные ссылки и не являются встроенными. Убедитесь, что есть только те методы, которые должны быть виртуальными. Посмотрите, сможете ли вы переписать свою программу, используя форму полиморфизма, которая не предполагает косвенных указаний, например использование метапрограммирования шаблонов.

  • Поскольку вы упомянули ассоциативные массивы: они сильно используют GC; чтобы ускорить их, переключитесь на стороннюю библиотеку, которая работает поверх std.allocator, например https://github.com/dlang-community/containers

  • Если некоторые части вашего кода можно распараллелить, std.parallelism - хороший инструмент для этого.

  • Поскольку вы упомянули, что проект является интерпретатором: есть много способов их оптимизации, вплоть до компиляции JIT/AOT. Возможно, вы могли бы сделать ссылку на существующую библиотеку, такую ​​как LLVM или libjit.

Другие вопросы по тегам