LINUX.ORG.RU
решено ФорумTalks

2 megabaks: Векторизация ,как и было предсказано Зальцманном из бухгалтерии


0

2

прелюдия:
чтобы не считали тему 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

★★★★★
Ответ на: комментарий от Sylvia

правда там есть бага =) continue в проверках вида for (...) { if (strcmp() ) нужно continue добавить.

щас может нормально причешу тогда ещё одну версию положу.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

там ok ставится чтобы без continue;
можно совсем убрать, я просто не совсем помню про то как оно работает, поэтому решила избежать, ну и в целом писала чтобы работало, так то я редко когда что пишу и уж совсем не пишу что-то много сложнее этого

Sylvia ★★★★★
() автор топика
Ответ на: комментарий от Sylvia

ps: если найду время, то добавлю еще 64 bit sse* и специальные инструкции новых процессоров

Sylvia ★★★★★
() автор топика
Ответ на: комментарий от Sylvia

я это понял, сейчас чутка поправил код ещё, может так удобнее будет добавлять доп тесты и т.п.:

http://dpaste.com/179248/

сравнил с выводом перлового, если 686=ppro, то всё ок.

qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.