Флаги оптимизации GCC для Intel Atom

Я занимаюсь разработкой критически важного приложения для процессора Intel Atom.

Каковы лучшие флаги оптимизации gcc для этого процессора?

9 ответов

Решение

GCC 4.5 будет содержать параметры -march=atom и -mtune=atom.

Источник: http://gcc.gnu.org/gcc-4.5/changes.html

Существует классная структура под названием Acovea (Анализ параметров компилятора с помощью эволюционного алгоритма), автором которой является Скотт Робер Лэдд, один из хакеров GCC. Это структура генетического / эволюционного алгоритма, которая пытается оптимизировать флаги оптимизации GCC для определенного фрагмента кода посредством естественного отбора.

Это работает примерно так: вы пишете небольшой кусочек тестового кода (он действительно должен быть маленьким, потому что он будет перекомпилирован и выполнен несколько тысяч раз), который представляет характеристики производительности более крупной программы, которую вы хотите оптимизировать. Затем Acovea случайным образом создает несколько десятков различных командных строк GCC, компилирует и запускает ваш тест с каждым из них. Затем лучшим из этих командных линий разрешается "спаривать" и "разводить" новых "детей", которые (надеюсь) наследуют лучшие "гены" от своих "родителей". Этот процесс повторяется в течение пары десятков "поколений", пока не появится стабильный набор флагов командной строки.

У меня есть скрипт, который автоматически выбирает подходящие флаги для вашей комбинации процессора и компилятора. Я только что обновил его для поддержки Intel Atom:

http://www.pixelbeat.org/scripts/gcccpuopt

Обновление: ранее я указывал -march = prescott для Atom, но более подробное изучение показывает, что Atom совместим с ISA, поэтому -march=core2 более подходит. Однако обратите внимание, что атомы являются ядрами в порядке, последним из которых является оригинальный Pentium. Поэтому, вероятно, лучше также настроить -mtune=pentium. К сожалению, у меня нет атома для тестирования. Я был бы очень признателен, если бы кто-нибудь мог сравнить разницу между:

-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3

Обновление: вот несколько хороших статей о низкоуровневой оптимизации для Atom:

Ну, вики Gentoo утверждает для прескотта:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel

CHOST="i686-ПК-Linux-гну"

CFLAGS = "- march = prescott -O2 -pipe -fomit-frame-pointer"

CXXFLAGS = "$ {CFLAGS}"

От Intel: начало работы с MID

При использовании GCC для компиляции рекомендуется использовать несколько флагов:

  • -O2 или -O1: флаг O2 оптимизирует скорость, а флаг -O1 оптимизирует размер
  • -msse3
  • -march = core2
  • -mfpmath = SSE

Как и для Pentium 4:

-march=prescott -O2 -pipe -fomit-frame-pointer

Я не знаю, есть ли в GCC какие-либо специфичные для Atom флаги оптимизации, но предполагается, что ядро ​​Atom очень похоже на оригинальный Pentium с очень значительным добавлением наборов инструкций MMX/SSE/SSE2/SSE3/SSSE3. Конечно, они имеют существенное значение, только если ваш код с плавающей запятой или DSP.

Возможно, вы могли бы попробовать:

gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse

А как насчет компилятора Intel C (icc)? По крайней мере, в тестах, которые идут с ним, доминирование над gcc довольно заметно...

Вот некоторая перекрестная пыльца блогов... что я действительно надеялся, был эталонный тест Firefox, скомпилированный для атома...

Адрес: http: // ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html

"Как выясняется, gcc, кажется, делает очень приличную работу с -mtune= native, а mtune= generic более чем приемлемо. Наибольшие выгоды (в этом тесте с высокой степенью математики) получаются от использования SSE для математики, но даже они уничтожены тюнингом для pentium4.

"Разница между самой быстрой и самой медленной оптимизацией составляет 21%. Влияние использования march вместо mtune незначительно (разницы недостаточно, чтобы определить, помогает она или нет).

"(Я включил k6 только для справки - я знаю, что у Atom нет 3dnow)

"Позднее обновление: настройка для k8 (с SSE и O3) дает чуть более высокий лучший результат 182."

i686 самый близкий. Не ходи на core2.

GCC 4.1 -O3 -march = i686 GCC 4.3 -O3 -march = собственный

GCC 4,1 -O4 -быстрая математика GCC 4,1 -O4 -быстрая математика

http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html

Другие вопросы по тегам