Я заинтересован в (частичной) оценке времени компиляции для c / c ++ (не с параметрами шаблона, как в c ++).Давайте рассмотрим следующий случай (взят из [1]):
double mypower(double x, int n) {
int i;
double ret = x;
for (i = 1; i < n; i++) {
ret *= x;
}
return ret;
}
Затем вы вызываете эту функцию где-то в коде с помощью:
mypower(x,3); // y varies all the time,
Затем компилятор может оптимизировать это (например,цикл раскатывания).Некоторые часто используемые функции, которые я использую, могут действительно выиграть от этой оптимизации (проверено созданием специализированной функции вручную).В презентации [1] описывается процесс, в котором функция ищется и заменяется специализированной версией функции.Это похоже на работу.Но это не кажется универсальным, код должен быть написан для функций, которые должны быть заменены.
Презентация, похоже, с 2008 года, я не смог найти ничего существенного больше информации, чем в этом источнике.Так что-нибудь улучшилось с тех пор?Я бы предпочел какой-то автоматизм, который делает то же самое для всех функций, возможно, управляемых синтаксисом атрибута (например, __attribute__(peval)
...).Далее я хотел бы, чтобы то же самое работало для объектно-ориентированного кода, создавая специализированные классы для различных объектов ([2], кажется, предполагает, что это невозможно).
Кроме того, я хотел бы, чтобы эта специализация работала не только для констант, найденных в коде.Я думаю о программе, скомпилированной для LLVM IR (байт-код) может сделать следующее:
Запуск программы во время фазы инициализации в интерпретаторе, во время этой фазы инициализации программа может прочитать некоторыеКонфигурация из файла.После инициализации интерпретатор останавливается.
Некоторые переменные (включая переменные-члены) фиксируются с этого момента.Извлеките эти переменные (например, помеченные атрибутом во время компиляции).
Создание специализированных функций и классов.Клонируйте их в байт-код.
Запустите JIT для создания собственного машинного кода.
Это много, что я прошу, и только несколько вычисленийИнтенсивные программы выиграют от такой оптимизации.Но некоторые люди должны работать над этим.Я, вероятно, просто не знаю подходящих поисковых терминов для подачи в Google.
Примечание. Пожалуйста, не предлагайте шаблоны классов с нетиповыми параметрами или ручной специализацией, я уже это делаю.Я просто предпочел бы, чтобы компилятор выполнял эту работу за меня.
Ссылки:
[1] Презентация, как выполнить частичную оценку в LLVM
[2] Форумное сообщение о частичной оценке