Влияние производительности-fno-strict-aliasing

git push -f origin HEAD^:master

, Который должен "отменить" нажатие.

22
задан Carlos 4 August 2009 в 04:32
поделиться

2 ответа

Это будет сильно различаться от компилятора к компилятору, поскольку разные компиляторы реализуют его с разным уровнем агрессии. GCC довольно агрессивен в этом отношении: включение строгого псевдонима заставит его думать, что указатели, которые «очевидно» эквивалентны человеческим (например, foo * a; bar * b = (bar *) a; ) не может быть псевдонимом, что допускает некоторые очень агрессивные преобразования, но, очевидно, может нарушить не тщательно написанный код. По этой причине GCC от Apple по умолчанию отключает строгое псевдонимание.

LLVM, напротив, не имеет даже строгого псевдонима, и, хотя это и запланировано, разработчики заявили, что они планируют реализовать его как запасной случай, когда ничто другое не может судить об эквивалентности. В приведенном выше примере он все равно будет судить об эквивалентности a и b. Он будет использовать псевдонимы на основе типов только в том случае, если он не может определить их отношения каким-либо другим способом.

По моему опыту, влияние строгого псевдонима на производительность в основном связано с инвариантным циклом движения кода, когда информация о типе может использоваться для доказать, что внутрицикловая загрузка не может быть псевдонимом для повторяемого массива, что позволяет вывести их из цикла. YMMV.

23
ответ дан 29 November 2019 в 04:44
поделиться

То, что я могу сказать вам по опыту (протестировав это с большим проектом на PS3, PowerPC - это архитектура, которая из-за большого количества регистров может действительно хорошо использовать SA), это то, что оптимизация вы увидите, как правило, будут очень локальными (по размеру) и небольшими. В исполняемом файле размером 20 МБ он удалил примерно 80 КБ из раздела .text (= code), и все это было в небольших областях и циклах.

Эта опция может сделать ваш сгенерированный код немного более легким и оптимизированным, чем сейчас ( думаю в диапазоне от 1 до 5 процентов), но не ждите больших результатов. Следовательно, эффект от использования -fno-strict-aliasing, вероятно, не окажет большого влияния на вашу производительность. Тем не менее, наличие кода, требующего -fno-strict-aliasing, в лучшем случае является неоптимальной ситуацией.

11
ответ дан 29 November 2019 в 04:44
поделиться