Re[14]: Тестирование производительности компиляторов
От: Gaperton http://gaperton.livejournal.com
Дата: 13.02.05 20:19
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>При хорошем оптимизаторе так тоже что-нибудь существенное намерять не выйдет:

...
ПК>Т.е. и цикл, и вызовы Get() пошли на север
Сопротивление компайлера понятно, но преодолимо . Выйти должно, так или иначе. Так как чудес не бывает, а оптимизации обязаны сохранять семантику, то цикл пошел на север только потому, что результат вычислений не используется, а const гарантирует отсутствие побочных эффектов. Dataflow analyzis какой-нибудь. Что, если все-таки попользовать pА после цикла, например, вывести значение указателя на печать? Тогда оптимизатор не сможет выкинуть цикл, и все получится .

Для пущей защиты от навязчивых оптимизаций (нам надо именно виртуальный вызов мерять, так?) можно также вынести цикл в отдельную функцию, сделать количество итераций параметром, и возвращать pA как результат. Опцией компилятора запретить автоинлайн функций, если он это умеет. Так прокатит?
Re[14]: Тестирование производительности компиляторов
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.02.05 18:31
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Т.е. и цикл, и вызовы Get() пошли на север


Именно об этом я и говорил когда сказал, что синтетика превращается в профанацию. VC и GCC очень часто делают подобные оптимизации. Но стоит сделать не тупую синтетику, а хотя бы мало мальский алгоритм, как точас же все компиляторы отбрасывают приколы и ведут себя как ожидается.

Возможно когда нибудь компиляторы научатся оптимизировать алгоритмы, но будет это явно не скоро.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Тестирование производительности компиляторов
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.02.05 18:31
Оценка:
Здравствуйте, Gaperton, Вы писали:

ПК>>Т.е. и цикл, и вызовы Get() пошли на север

G>Сопротивление компайлера понятно, но преодолимо . Выйти должно, так или иначе. Так как чудес не бывает, а оптимизации обязаны сохранять семантику, то цикл пошел на север только потому, что результат вычислений не используется, а const гарантирует отсутствие побочных эффектов. Dataflow analyzis какой-нибудь. Что, если все-таки попользовать pА после цикла, например, вывести значение указателя на печать? Тогда оптимизатор не сможет выкинуть цикл, и все получится .

G>Для пущей защиты от навязчивых оптимизаций (нам надо именно виртуальный вызов мерять, так?) можно также вынести цикл в отдельную функцию, сделать количество итераций параметром, и возвращать pA как результат. Опцией компилятора запретить автоинлайн функций, если он это умеет. Так прокатит?


Все это пожет оказаться пустм делом. Тупые тесты компиляторы обхдят. Они и виртуальные вызовы могут заинлайнить.

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

Например, можно использовать Visitor или Comparer-ы.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.