Можно ли скомпилировать что-то, что автоматически использует разные процессоры? - PullRequest
1 голос
/ 08 января 2011

Можно ли скомпилировать что-то, что автоматически использует разные процессоры, которые он запускает на наборах команд?

В идеале для gcc и c, без явного выполнения в коде.

Will -mtune(один) сделать это?

1 Ответ

3 голосов
/ 08 января 2011

В последних версиях gcc есть -march=native, который генерирует код для использования всех расширений набора команд, доступных на компьютере, на котором работает компилятор, но не генерирует двоичный файл, который обнаруживает во время выполнения, какие расширения доступны.Можно написать код, который будет определять, какие расширения доступны, и использовать различные пути кода, основанные на этом (это распространенная техника для чувствительного к производительности кода, такого как игровые движки), но я не знаю каких-либо инструментов, которые автоматически генерируют этокод и различные версии вашего кода.

Если вы хотите создать двоичный файл, который может работать на нескольких разных архитектурах (например, x86 и ARM), вам нужно создать нечто, называемое толстый двоичный файл или в маркетинговом жаргоне Apple - универсальный двоичный файл : для этого требуется один раз скомпилировать код для каждой архитектуры и связать двоичные файлы для разных архитектур в один и тот же файл.Это работает только в операционных системах, которые поддерживают толстые двоичные файлы, поскольку операционной системе необходимо знать, что она должна загружать только сегменты для правильной архитектуры.

...