Я компилирую свое приложение C ++, используя GCC 4.3. Вместо того, чтобы вручную выбирать флаги оптимизации, которые я использую -march=native
, теоретически следует добавить все флаги оптимизации, применимые к оборудованию, на котором я компилирую. Но как я могу проверить, какие флаги он использует?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
опции, хотя и является частьюcc1
командной строки ...-march=native
и он будет работать везде только следующее:gcc -Q --help=target
.Чтобы увидеть флаги командной строки, используйте:
Если вы хотите увидеть, как компилятор / прекомпилятор определяет набор определенных параметров, сделайте это:
источник
native
самом деле соответствует.Должно быть (
-###
похоже на-v
):Показать "настоящие" нативные флаги для gcc.
Вы можете сделать их более «четкими» с помощью команды:
и вы можете избавиться от флагов с -mno- * с помощью:
источник
Если вы хотите узнать, как настроить не нативную кросс-компиляцию, я нашел это полезным:
На целевой машине
Затем используйте это на сборочной машине:
источник
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
но размеры кеша действительно отсутствуют.Я собираюсь бросить свои два цента в этот вопрос и предложить немного более подробное продолжение ответа Элиаса. Начиная с gcc 4.6, запуск сообщений
gcc -march=native -v -E - < /dev/null
приводит к увеличению количества спама в виде лишних-mno-*
флагов. Следующее лишит их:Тем не менее, я проверил правильность этого только на двух разных процессорах (Intel Core2 и AMD Phenom), поэтому я предлагаю также запустить следующий скрипт, чтобы убедиться, что все эти
-mno-*
флаги могут быть безопасно удалены.Я не обнаружил разницы между
gcc -march=native -v -E - < /dev/null
иgcc -march=native -### -E - < /dev/null
другими параметрами, кроме указанных в кавычках - и параметров, которые не содержат специальных символов, поэтому я не уверен, при каких обстоятельствах это имеет какое-то реальное значение.Наконец, обратите внимание, что это
--march=native
было введено в gcc 4.2, до которого это просто нераспознанный аргумент.источник