Вопрос

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

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

Это было полезно?

Решение

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 совместим с merom ISA, поэтому -march= core2 более подходит.Обратите внимание, однако, что атомы представляют собой упорядоченные ядра, последним из которых является оригинальный pentium.Поэтому, вероятно, лучше также использовать -mtune=pentium.К сожалению, у меня нет атома для тестирования.Я был бы очень признателен, если бы кто-нибудь мог сравнить разницу между:

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

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

Ну, в Gentoo wiki говорится о прескотте:

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

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=прескотт -O2 -труба -fomit-рамка-указатель"

CXXFLAGS="${CFLAGS}"

От Intel, Начало работы с MID

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

  • -O2 или -O1:Флаг O2 оптимизирует скорость, в то время как флаг -O1 оптимизирует размер
  • -msse3
  • -март=ядро 2
  • -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

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

Адрес :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 -ffast-math GCC 4.3 -O4 -ffast-math

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top