включение -msse4 снижает производительность?
sergeip 25 января, 2010 - 10:57
Пересобрал систему с поддержкой msse4, т.к. являюсь обладателем процессора Core i7 и хотел бы использовать его возможности на полную мощь (до этого система была собрана с march=native). На глаз изменений естественно не заметил, но когда ради интереса запустил sunspider на своём firefox, то был очень расстроен результатами: 780ms с march=native против 980ms с msse4 (это явно уже не в пределах статистической погрешности). Стоит заметить что я использовал флаги рекомендованные в Gentoo wiki
CHOST="i686-pc-linux-gnu" CFLAGS="-O2 -pipe -march=core2 -msse4 -mcx16 -msahf -fomit-frame-pointer" CXXFLAGS="${CFLAGS}"
погуглил тесты производительности для других приложений, но так ничего и не нашел.
Что скажите?
»
- Для комментирования войдите или зарегистрируйтесь
Ты, несомненно, прочитал и
Ты, несомненно, прочитал и понял шапку на странице
Не грусти, товарищ! Всё хорошо, beautiful good!
наверное не понял, объясните
наверное не понял, объясните пожалуйста )
вот на всякий случай сравнил какая разница между safe cflags и native
Где-то уже проскакивало, что
Где-то уже проскакивало, что --help=target не выдает настоящие флаги оптимизации, которые будут применены при сборке. Так что не показатель.
В двух словах - native включает все то, что ты указал, и сверх того.
Не грусти, товарищ! Всё хорошо, beautiful good!
Что бы точно посмотреть что
Что бы точно посмотреть что выставляет -march=native надо:
Размер кешей выставлять не нужно, с ним некоторые ./configure неправильно парсят CFLAGS
Working on Gentoo Linux for Asus P535 and Qtopia :-)
gcc -v -march=pentium-m
gcc -v -march=pentium-m test.c -o /dev/null
gcc -v -march=native test.c -o /dev/null
/usr/libexec/gcc/i686-pc-linux-gnu/4.4.2/cc1 -quiet -v test.c -D_FORTIFY_SOURCE=2 -march=pentium-m --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=generic -quiet -dumpbase test.c -auxbase test -version -o /tmp/cckhlAy0.s
Т.к. юзаю distcc, то в make.conf стоит -march=pentium-m, но в любом случае -msse2 -msse -mmmx отутствуют.B еще у native присутсвует -mtune=generic
Исходя из этого в make.conf мне стоит написать: "-march=pentium-m -msse2 -msse -mmmx -pipe -fomit-frame-pointer" Я прав или надо учесть еще что-то?
в другом треде приводили
в другом треде приводили ссылку:
http://gcc.gnu.org/ml/gcc-help/2009-04/msg00305.html
а т.к.
то во флаге -march=pentium-m содержатся флаги -mmmx,-msse,-msse2. И их включать не нужно. А -fomit-frame-pointer содержится во флаге -O2.
Поправьте если не прав.
Это я читал, знаю, но как
Это я читал, знаю, но как проверить, что реально включилось - хз. Можно конечно поверить на слово, но все равно останется вопрос, почему некоторые флаги проявляются в явном виде, а некоторые нет.
в принципе
Однозначно проверить можно только скомилировав программу заведомо использующую данные фунции (в идеале тестовую) 2мя способами и посмотрев результат. могу заняться если кто-нибудь кинет ссылку на простейшие примеры benchmark'ов или программ, которые можно оптимизировать используя sse,sse2,sse3 и т.д.
-Q --help=target - показывает те флаги, которые gcc вставляет в команду компиляции дополнительно к платформе, т.е. флаги, которые входять в march не показываются, т.е. тут всё логично. Но почему это сделано так, чтоинформацию нужно искать в рассылках мне лично не понятно.
написал сейчас простенькую
написал сейчас простенькую программу с умножением векторов. Собрал с gcc -O2 -march=native и диззасеблировал, в работе присутствуют вызовы типа CVTSD2SS, это вызовы SSE2. Т.е. sse2 реально включилось. Может можно посмотреть и другие примеры, но для меня это занимает много времени лазания по гуглу, т.к. я плохо разбираюсь, что есть в каком SSE и где компилятор может соптимизировать.
native включает флаги
native включает флаги оптимизации для выбранного типа процессора. их список можно увидеть на
http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html
так для core2:
Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support.
соответсвенно все ssse3 будут включены автоматом, но не msse4. Включение msse4 явно приводит к включению явно всех младших msse, что можно видеть на представленном diff.
qnikst написал(а): все ssse3
Судя по тыц - это одно и то же...
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Похоже отбой воздушной
Похоже отбой воздушной тревоги. У меня во время пересборки, firefox даунгрейднулся с 3.6 до 3.5.6 какого - то хрена. И теперь он hard masked в оф ветке. Вобщем поставил, покрутил и так и сяк, разницы вобще никакой не заметил между march=native и save cflags.
на всякий случай оставил такой вариант
А мы тут пыхтели, а оно тут о
А мы тут пыхтели, а оно тут о как :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)