Вот этот смежный вопрос: GCC: как отличается марш от mtune?
Однако существующие ответы не идут намного дальше, чем руководство GCC. В лучшем случае получим:
Если вы используете
-mtune, тогда компилятор будет генерировать код, который работает на любой из них, но будет способствовать последовательности команд, которые работают быстрее всего указанный вами CPU.
и
Опция
-mtune=Yнастраивает сгенерированный код для ускорения на Y, чем на других процессорах он может работать.
Но как именно GCC предпочитает одну конкретную архитектуру при запуске, все еще будучи способным запускать сборку на других (обычно более старых) архитектурах, хотя и медленнее?
Я знаю только одно (но я не компьютерный ученый), который был бы способен на такое, и что диспетчер CPU. Тем не менее, мне кажется, что mtune генерирует диспетчер за кулисами, и, вероятно, действует какой-то другой механизм.
Я чувствую это по двум причинам:
- Поиск "gcc mtune cpu dispatcher" не находит ничего актуального; и
- Если он был основан на диспетчере, я думаю, что он может быть более умным (даже если по какой-либо опции, кроме
mtune), и проверитьcpuidна обнаружение поддерживаемых инструкций во время выполнения, вместо того, чтобы полагаться на именованную архитектуру, которая предоставляемые во время сборки.
Итак, как это работает?