Использование программами SSE3, SSSE3 и SSE4.1 [РЕШЕНО]
marlock 17 Августа, 2010 - 19:03
читая man gcc понял, что -march=core2 включает SSE>=3
но, при проверке генерируемых инструкций выясняется, что используются только SSE и SSE2:
использовал этот скрипт
в качестве основного результата брался этот (./analyze /usr/bin/mplayer), сделанный не мной.
мои CFLAGS и CFLAGS компа, где был засечён основной результат
»
- Для комментирования войдите или зарегистрируйтесь
добавь флаг -msse4
добавь флаг
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
мой C2D E7400 держит только
мой C2D E7400 держит только SSE 4.1
Я просто для примера привел
Я просто для примера привел =)
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
Цитата: SSE4.1 is for 45 nm
http://en.wikipedia.org/wiki/Intel_Core_2
На всякий случай...
и к чему это?
и к чему это?
Во-первых, это объясняет
Во-первых, это объясняет почему -march=core2 не включает sse4.1 (так как среди core 2 duo процессоров не все поддерживают sse4.1).
Во-вторых, это написано до того как вы сообщили модель своего процессора.
если посмотреть в мои флаги,
если посмотреть в мои флаги, то там обнаруживается -msse4.1
А gimp написан с
А gimp написан с использованием инструкций из sse4.1 ?
А gimp написан с
И как написать с с использованием инструкций из sse4.1 на сишке или плюсах ? :) Это не возможно, если не использовать асм, но тогда теряется переносимость. Как пример, рекомендую рязобратся, что делает юз sse2 в openssl и закрыть тему оптимизации по sse раз и навсегда
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
google: "intrinsic gcc sse"
google: "intrinsic gcc sse" http://www.google.ru/search?hl=ru&newwindow=1&q=intrinsic+gcc+sse&aq=f&aqi=&aql=&oq=&gs_rfai=
Здесь: http://gcc.gnu.org/wiki/Math_Optimization_Flags ссылаются на xmmintrin.h, в котором видимо определены некоторые (или все) SIMD инструкции. Где я должен использовать ассемблер ? Да, появляется несущественная зависимость от компилятора, но в целом код переносим.
Я предлагаю не закрывать тему SIMD в gentoo, мне, к примеру, интересно есть ли действительно хоть какой-то профит от -msse в CFLAGS, если само приложение не использует прямо SIMD инструкции ?
хорошо, пример кода,
хорошо, пример кода, требующего ( т.е не работаюшего без) sse3 на чистом си в студию, пожалуйста.
U.P как пример - http://cvs.openssl.org/dir?d=openssl/crypto/md5.
Особенно - http://cvs.openssl.org/fileview?f=openssl/crypto/md5/asm/md5-x86_64.pl&v=1.8
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Я не могу привести пример
Я не могу привести пример кода, использующего sse3 (хотя я не понимаю зачем это вообще нужно), у меня не было опыта программирования с использованием SIMD.
Что касается http://cvs.openssl.org/fileview?f=openssl/crypto/md5/asm/md5-x86_64.pl&v=1.8
то там только ассемблер, если я не ошибаюсь. Ни sse3 инструкции, ни любой другой SIMD там нет.
Что касается именно sse3 intrinsic функций, то они, насколько я понял, определены в pmmintrin.h, у меня этот файл можно найти в /usr/lib/gcc/i686-pc-linux-gnu/4.4.4/include/pmmintrin.h
Программировать на C, используя SIMD (sse, sse2, ...) без ассемблерных вставок, можно.
Что именно вы хотите сказать ?
Ж_Ж
увы
а эта строка - это просто подпись
пошёл учить матчасть
пошёл учить матчасть, нихрена не понял
:
по-русски это звучит так:
берём все файлы из /usr/bin/, отфильтровали бинарники для analyze
(потому что зачем analyze-у, скажем, /usr/bin/whatis - это ж скрипт),
и вызвали analyze для каждого такого бинарника.
Вывод сохранили в sse.txt
И видим, что sse3 инструкции нашлись лишь в нескольких программах,
ssse3 - только в ОДНОЙ программе, а sse4.1 вообще ни у кого нет.
Надо бы для чистоты эксперимента написать helloworld c asm-вставками с sse4.1,
чтобы убедиться, что и gcc знает, и analyze увидит.
Но лениво, да и работа отвлекает.
а эта строка - это просто подпись
вобщем, суть в том, что
вобщем, суть в том, что большинство программ не держат даже SSE3. я правильно вас понял? :)
а почему-же тогда в эталонном результате и sse 4.1 есть?
попробуйте проверить
попробуйте проверить /usr/lib64/libx264.so.98
OMFG
А! Не там искали! Thnx!
а эта строка - это просто подпись
О_О
в заголовок
[SOLVED] [РЕШЕНО]
а эта строка - это просто подпись
Какая то странная
Какая то странная тестилка (или библиотека):
Это на процессоре, который не знает про sse4
>_<
победителем является /usr/lib64/gstreamer-0.10/libgstffmpeg.so из media-plugins/gst-plugins-ffmpeg
тут всего в кучу и много
а эта строка - это просто подпись
analyze-x86.c ищет инструкции
analyze-x86.c ищет инструкции и в блоках данных - верить ему нельзя
Как так
ведь я же вижу строку:
snprintf(tmp, 8191, "objdump -d %s", argv[1]);
а man objdump строго говорит:
а эта строка - это просто подпись
И что, objdump и блоки данных
И что, objdump и блоки данных переведет в мнемоники ассемблера.
PS. Точно сказать что код, а что данные - Вам не сможет ни один тупой дизассемблер - для этого используют такие вещи как ida, да и там надо долго глазами смотреть и кнопочки тыкать.
о_0
а конкретный пример того, как objdump ошибся, привести можете?
а эта строка - это просто подпись
есть подозрение, что там это
есть подозрение, что там это на asm просто написано, но ветка кода не используется, если проц не тот.
а как оно тогда
а как оно тогда ассемблируется? Тогда уж в напрямую в машинных кодах
sse4.1 встречал очень редко,
sse4.1 встречал очень редко, sse3 вообще не видел вроде бы.
разобрался!
нехитрые тесты с использованием /etc/portage/env/* показали, что с -mfpmath=sse,387 генерируются только SSE и SSE2, а с -ftree-vectorize генерируются вообще ВСЕ инструкции.
результаты:-mfpmath=sse,387, -ftree-vectorize