Я заинтересован в оптимизации потоков данных и потоков управления графами и, в частности, более сложными в вычислительном отношении. Но также будет интересно узнать о последних изобретениях в области оптимизации глазков.
Я заинтересован в оптимизации потоков данных и потоков управления графами и, в частности, более сложными в вычислительном отношении. Но также будет интересно узнать о последних изобретениях в области оптимизации глазков.
Ответы:
Я не уверен, насколько она нова , или если это слишком много для прикладной стороны для вашего интереса, но Хоопл показывает, как оптимизация управления / потока данных может быть модульной, с распространением фактов о вершинах управляющего графа, не зависящих от язык и специфическая оптимизация.
Они ссылаются на алгоритм 2002 года Лернера, Гроува и Чамберса, который объединяет простые оптимизации в «супероптимизацию».
Я полагаю, что метод Equality Saturation , как другой подход к проблеме оптимизации проходов, будет уместен. Насколько мне известно, это пока не доказано практической конкретной реализацией в полноценном компиляторе. Следующая Генерация Оптимизации Компилятора из Испытаний может также представлять интерес.
Было немного возрождения в проверенных оптимизирующих компиляторах. В дополнение к статье Лернера (упомянутой в предыдущем комментарии), вы можете посмотреть на проект CompCert, которым руководит Ксавье Леруа. Они сделали несколько классных вещей с указанием оптимизаций в качестве проверяемых компьютером доказательств (используя Coq ). Я еще не читал статьи, но проект Verified Software Toolchain в Принстоне, похоже, также дает интересные результаты в этой области.
Признавая, что baz [i] + = force (foo [i], foo [j]) в двойном цикле FOR имеет независимые результаты для (i, j), и переупорядочиваем вызовы в кривую заполнения пространства на (i, j), чтобы сократить кэш промахи.
Не совсем "глазок", но приятно получить кеш-поведение "бесплатно".