Какие флаги и методы оптимизации GCC безопасны для разных процессоров? - PullRequest
0 голосов
/ 21 сентября 2018

При компиляции / компоновке библиотек или программ на языке C / C ++, предназначенных для работы во всех реализациях ISA (например, x86-64), какие флаги оптимизации защищены с точки зрения правильности и производительности во время выполнения?Мне нужны оптимизации, которые дают правильные результаты и не будут пагубно влиять на производительность конкретного процессора.Например, я хотел бы избежать флагов оптимизации, которые приводят к повышению производительности во время выполнения на Intel Core i7 8-го поколения, но приводят к снижению производительности на AMD Ryzen.

Насколько безопасны PGO, LTO и -O3?Это зависит исключительно от -march и -mtune (или их отсутствие)?

1 Ответ

0 голосов
/ 21 сентября 2018

Все они должны быть "безопасными", при условии, что ваш код хорошо определен.

Если вы не хотите специализироваться для определенного семейства процессоров, просто оставьте -march и -mtune в одиночестве;по умолчанию подходит универсальный x86_64.

PGO - это всегда хорошая идея, он в основном используется для избежания ветвлений.

LTO и -O3 могут по-разному влиять на разные кодовые базы.Например, если ваш код выигрывает от векторизации, то -O3 - это большая победа над -O2, но дополнительные встраивание и развертывание могут привести к большим размерам кода, что может быть недостатком в системах с более ограниченным кэшем.

В конце концов, единственный совет, который когда-либо здесь действительно что-то значит: измерить его и посмотреть, что хорошо для вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...