2011-01-08 2 views
1

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

Идеально на gcc и c, не делая это явно в коде.

Will -mtune (в одиночку)?

+0

Да, его называют java. = Р – Andres

ответ

3

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

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

Смежные вопросы