Когда приложение gcc компилируется в режиме выпуска (O3), какие расширения набора инструкций используются?

Когда приложение GNU C/C++ компилируется в ванильном режиме выпуска (O3), какие расширения набора инструкций используются?

Как расширенный набор инструкций вступает в игру? Включаются ли в результирующий исполняемый файл несколько блоков кода, а затем используются ли они, если они доступны?


person JeffV    schedule 04.09.2013    source источник


Ответы (1)


O3 будет использовать только инструкции, указанные при компиляции (по умолчанию указывается при построении набора инструментов, если ни один из переключателей не объяснен здесь указано). Он просто попытается выполнить более агрессивную оптимизацию (как указано здесь). Большинство оптимизаций на самом деле выполняются в «среднем» конце компилятора, прежде чем код даже преобразуется в форму, специфичную для целевой машины.

Таким образом, вы можете комбинировать любой -O с любым расширением набора инструкций, используя эти две группы переключателей.

person dbrank0    schedule 04.09.2013
comment
Вы можете собрать gcc так, чтобы -mpopcnt или -mavx были включены по умолчанию, без -march= или других настроек? Обычно вы должны использовать -march=native (или -march=skylake или что-то еще), чтобы настроиться на конкретный uarch, а также включить поддерживаемые им расширения набора инструкций. - person Peter Cordes; 08.10.2017