?

Log in

No account? Create an account
Про умные компиляторы - Ivan Sorokin's LJ

> Recent Entries
> Archive
> Friends
> Profile

April 2nd, 2013


Previous Entry Share
11:32 pm - Про умные компиляторы
Есть категория людей, которые считают, что компиляторы очень умные. Что якобы можно писать любой код, а компилятор во всём разберется и соптимизирует как надо.

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

http://locklessinc.com/articles/vectorize/ — я считаю замечательная статья, показывающая как легко компилятор может выдать неоптимальный код.

(1 comment | Leave a comment)

Comments:


[User Picture]
From:mpd
Date:April 3rd, 2013 08:04 am (UTC)

Re: Про умные компиляторы - как легко компилятор может в

(Link)
Призываю написать отдельную статью (сам хотел): Как напугать консервативный оптимизирующий компилятор.
Составить эдакий лист явлений, на которые компилятор может почти гарантированно сказать: "А, не, здесь я - сдаюсь!"

Там же остаётся ещё много задач в самом современном оптимизирующем компиляторе, которые не совсем разрешимы без эвристик. Да, pointer aliasing - одна из тех, где в определённый момент консервативный компилятор вынужден сдаться, "не поняв" что-то, что кажется автору программы - очевидным. Как говорит Мучник у себя
Optimization requires that we have compiler components that can construct a global "understanding" of how programs use the available resources.
Совершенно справедливое замечание, что иногда нет этого вот глобального представления программы.

Как сказано в Пурпурном драконе "Глава 8. Генерация кода" (да и у Мучника, наверняка)
Математически проблема генерации оптимальной целевой программы для данной исходной является неразрешимой; многие из подзадач, встречающихся при генерации кода, таких как распределение регистров, вычислительно трудно-разрешимы. На практике мы вынуждены довольствоваться эвристическими методами, генерирующими хороший, но не обязательно оптимальный код.

> Go to Top
LiveJournal.com