прелюдия:
чтобы не считали тему 5.4,
речь идет о том включают ли флаги -msse* генерацию соответствующих инструкций в коде или имеют лишь пермиссивное значение
Итак маленькое пилотное исследование:
материал исследования - GNU bash 4.1,
скомпилированый бинарник содержит около 160 тысяч asm инструкций,
не содержит специализированных ассемблерных вставок с SSE/MMX.
инструментарий - GCC 4.3.4 release, GCC 4.4.3 release, GCC 4.5 release candidate,
а также вот эта утилита http://dev.gentoo.org/~dirtyepic/bin/analyze-x86 , которую я переписала в процессе на Си, потому что перлячья уж сильно тормозит
Значение исследования: помочь гентушникам и прочим собирателям из исходников познать дзен, ввиду того что публикуемая документация по GCC недостаточно данный вопрос раскрывает.
интерлюдия: о -march=native , разные версии GCC относятся к этому флагу немного по разному,
посмотреть что именно они имеют ввиду можно не только флажком -Q , но и флажком -v собирая любой файл,
итак hello_world.c
GCC 4.3
Core2 Penryn
-march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=core2
Celeron M390
-march=pentium-m --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=generic
Atom 330 (не определены размеры кешей!)
-march=core2 -mcx16 -msahf -mtune=core2
GCC 4.4 (для атома - redhat svn версия, т.к. ванильная атом не поддерживает)
-march=core2 -mcx16 -msahf -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=core2
-march=pentium-m --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=generic
-march=atom -mcx16 -msahf -mmovbe --param l1-cache-size=24 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=atom
GCC4.5 (только для core2)
-march=core2 -mcx16 -msahf -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=core2
выводы достаточно интересны тем, что -msse может как присутствовать, так и отсутствовать, практический вывод - нужно проверять что конкретно у вас.
Тесты для GCC4.4:
1) -O2 -march=core2
686: 394
mmx: 8
2) -O2 -march=core2 -msse4.1 -mmmx
686: 394
mmx: 8
3) -O2 -march=core2 -ftree-vectorize
686: 416
mmx: 17
sse: 1
sse2: 39
4) -O2 -march=core2 -ftree-vectorize -msse4.1 -mmmx
686: 416
mmx: 17
sse: 1
sse2: 39
5) -O2 -march=core2 -fno-tree-vectorize -mfpmath=sse
686: 394
mmx: 8
6) -O2 -march=core2 -fno-tree-vectorize -mfpmath=sse -msse4.1 -mmmx
686: 394
mmx: 8
для GCC 4.3 и GCC 4.5 rc результаты получились аналогичными, разве что у 4.5 число использования «высших» инструкций выросло, как для ppro, так и для mmx/sse
Выводы:
1) -mmmx включен всегда, несмотря на то что -Q показывает его как выключеный
2) -msse не включает генерацию соответствующих инструкций
3) -mfpmath задает только путь fpu/sse , в ассемблерном листинге не отлавливается (?) возможно следует повторить тест на чем-нибудь более интенсивно использующем математику
4) для -ftree-vectorize не имеет значение флаг -msse , достаточно -march=
Так что все подтверждается, -msse имеют лишь пермиссивное значение .
Если будете повторять - попробуйте взять что-нибудь другое, только без asm вставок с инструкциями mmx/sse
←
1
2
→
Ответ на:
комментарий
от Sylvia
Ответ на:
комментарий
от qnikst
Ответ на:
комментарий
от Sylvia
Ответ на:
комментарий
от qnikst
Ответ на:
комментарий
от Sylvia
Ответ на:
комментарий
от Sylvia
Ответ на:
комментарий
от Sylvia
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [гентушникам-экстемалам]Про -ftree-vectorize (2011)
- Форум [gentoo][amdfam10] (2011)
- Форум [gentoo] CFLAGS для i7 (2009)
- Форум [gentoo] gcc 4.4.1 & firefox 3.5.2 (2009)
- Форум distcc между Intel и AMD (2016)
- Форум x11-base/xorg-server-1.8.0 (2010)
- Форум [gentoo] оптимизация (2010)
- Форум GCC и -march=native на Pentium'е (2018)
- Форум [GCC] Не генерируются инструкции sse4.1 (2010)
- Форум [gentoo]А какие флаги использовать с i3-5? (2010)