LINUX.ORG.RU

[sse2]Пересборка GTK


0

1

Видел примерно с месяц назад тут тред, то-ли в толксах, то-ли в галерее, с пересобранным GTK с поддержкой sse2. Хвалились тем что отрисовка стала заметно быстрее. Как сие осуществить на арче?

Deleted

ах да, если система x86_64, то у тебя, очевидно, уже включено sse2

anonymous
()
Ответ на: комментарий от Deleted

а если не будет, то о какой «поддержке sse2» идёт речь вообще, но не знаю что и о чём? CFLAGZ='-zomg-optimize -funtroll-loops' ничего не дадут

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

*бабка бабке нашептала, но не знаю что и о чём?

anonymous
()
Ответ на: комментарий от Deleted

Вот же libjpeg пересобрали

её не пересобрали. её переписали на ассемблере с использованием векторных инструкций проца. гугли libjpeg-turbo

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

Скачал исходники GTK, прошерстил configure --help, по поводу sse там нет вообще ничего. Пробовал насильно скормить --enable-sse - ругнулся на неизвестную опцию.

Забыл добавить самое главное - нужно это на 2-м GTK

Deleted
()

Copycat

с пересобранным GTK с поддержкой sse2.

есть 2 варианта:
1. поставить march=чего-нить-с-SSE2, и надеяться, что у gcc мозгов хватит использовать SSE2
2. переписать отрисовку на асме, используя SSE2

Конечно вариант 2 лучше...

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

ymuv

Поставь генту не вариант?

какая разница? это хоть в default OS возможно (я про бубунту).

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

cast RPG

Кто посмел тревожить сон? Пересборка коснулась только Cairo и gtk-engine. Этого хватило, в убунте вообще собрано всё под проц i386. Если 64 бит, то думаю эффекта будет меньше - там флаги эти уже включены (предполагаю).

RPG
()
Ответ на: комментарий от drBatty

поставить march=чего-нить-с-SSE2, и надеяться, что у gcc мозгов хватит использовать SSE2

ну я так и делал. Правда в GTK sse нафиг не сдался, а в cairo по-моему даже есть асм-вставки, и проблема в том что в убунте 32бит все собирается под 386. Включение sse только в надежде, что где-то gcc сообразит применить векторизацию. Судя по докам, он это умеет делать, и делает неплохо.

Только для ясности: -march=core2 -msse2

For the i386 compiler, you need to use -march=cpu-type, -msse or -msse2 switches to enable SSE extensions and make this option effective. For the x86-64 compiler, these extensions are enabled by default.

Как уже и было сказано. На 64 бит у меня компилятор даже складывать числа пытался через xmm регистры. На 32 он хитрит и не бросается налево и направо sse-оптимизацией. Хотя может просто с новой версией компилятор поумнел и не гоняет зазря 128битные регистры для сложения двух float. В общем, магия.

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

SIMD автовекторизация в gcc только по -O3/-ftree-vectorize включается, срабатывает по воле великой тыквы и надеятся на неё не стоит. Ресурсоёмкие счётные задачи специально под конкретный SSE пишутся, вручную, используя либо сишные интринсики, либо ассемблерные вставки.

А так, передача ключей типа -msseчтото компилятору приводит только к определению препроцессорных констант типа __SSEЧТОТО__, так что хоть обперекомелируйся, быстрее не станет ни на грамм.

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

RPG

Включение sse только в надежде, что где-то gcc сообразит применить векторизацию. Судя по докам, он это умеет делать, и делает неплохо.

ага.

RPG

Как уже и было сказано. На 64 бит у меня компилятор даже складывать числа пытался через xmm регистры. На 32 он хитрит и не бросается налево и направо sse-оптимизацией. Хотя может просто с новой версией компилятор поумнел и не гоняет зазря 128битные регистры для сложения двух float. В общем, магия.

а ещё не стоит забывать, что:

Потребление памяти всего этого чуда, как ни странно, 1.5 — 2 гигабайта.

впрочем, если есть память, то это не проблема.

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

впрочем, если есть память, то это не проблема.

Это уже больше вина хрома. И с каких пор регистры стали памятью?:)

RPG
()
Ответ на: комментарий от d_a

d_a

А так, передача ключей типа -msseчтото компилятору приводит только к определению препроцессорных констант типа __SSEЧТОТО__

возможно этого достаточно. А может и нет. Надо код смотреть, а там много и мне лень.

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

RPG

Это уже больше вина хрома. И с каких пор регистры стали памятью?:)

вы таки думаете, что они только обрабатываются по 128 бит? Я думаю, что сохраняются тоже. Честно говоря - без понятия, что и как там сделано.

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

возможно этого достаточно.

достаточно, только если в коде будет предусмотрена поддержка sse. те, -msse* только разрешают генерить компилеру эти инструкции

anonymous
()
Ответ на: комментарий от drBatty

вы таки думаете, что они только обрабатываются по 128 бит? Я думаю, что сохраняются тоже. Честно говоря - без понятия, что и как там сделано.

Загрузка в регистры это отдельная тема, но недумаю что там по 128 бит на флоат становится.

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

4 флоата в xmm регистр за раз лезет, и обрабатываются одной мнемоникой. Отсюда весь профит simd - математические приложения могут зараз обрабатывать вектора из четырёх компонент (типа координат в пространстве), приложения работающие с графикой - четыре компоненты цвета по некоторой модели и т.д.

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

anonymous

достаточно, только если в коде будет предусмотрена поддержка sse

ну и я о том-же. Надо код смотреть...

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

RPG

Загрузка в регистры это отдельная тема, но недумаю что там по 128 бит на флоат становится.

а там разве float? а что не int? int'ов можно немеренно напихать в один регистр - разница только в точности, а для графики особая точность не нужна.

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

а там разве float? а что не int? int'ов можно немеренно напихать в один регистр - разница только в точности, а для графики особая точность не нужна.

ЕМНИП, для флоата SSE, для инта - ММХ. И инт - это 32 бит, так что в один регистр много на запихнешь, даже 128-битный.

man ldconfig

А можно подробнее? Я уже несколько лет в гугле вяло пытаюсь найти решение чтобы вместо /usr/local всё копировалось в /usr

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

если добавить /usr/local/lib в пути динамического линкера, либы оттуда будут иметь приоритет; и не надо будет подменять вручную системные в /usr/lib, превращая систему в слаку

anonymous
()
Ответ на: комментарий от drBatty

возможно этого достаточно. А может и нет. Надо код смотреть, а там много и мне лень.

Сказали, же, что автовекторизация включается при -O3. gcc её умеет проводить, проверял на простеньких программках с компиляцией в ассемблерный код. У компилятора есть много опций для управления векторизацией, но я чтобы не заморачиваться ставлю просто O3, и это сработало довольно неплохо.

Когда у вас нет -msse компилятор даже код на асме под sse развернёт в простой i386.

RPG
()
Ответ на: комментарий от anonymous

Не-не, вот собираю я скажем GIMP 2.7, которого в репах до сих пор нет, а он автоматом ложится в /usr/local/bin и естественно перебивается тем гимпом, что лежит в /usr/bin. Наличие этой папки в PATH почему-то не спасает, в чем косяк до сих пор не понимаю...

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

RPG

ЕМНИП, для флоата SSE, для инта - ММХ. И инт - это 32 бит, так что в один регистр много на запихнешь, даже 128-битный.

начните отсюда: http://ru.wikipedia.org/wiki/SSE

RPG

Я уже несколько лет в гугле вяло пытаюсь найти решение чтобы вместо /usr/local всё копировалось в /usr

от блин... ./configure --help, там в самом начале про --prefix написано. Впрочем, вам не это советуют, компиллите вы правильно, вам советуют, как я понимаю, поправить /etc/ld.so.conf

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

anonymous

и не надо будет подменять вручную системные в /usr/lib, превращая систему в слаку

в слаке так делают только идиоты.

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

-march=native включит все то, что поддерживает ваш процессор.

А на 32-битах он не будет подменять мне native на i686? Вообще, не доверяю я компилятору, ставлю Core2. Если поставить prescott (у меня именно такой процессор), то почему-то не включается поддержка всего того, что есть у меня в процессоре.

Вообще компилятор должен брать инфу из /proc/cpuinfo и компилить под эту машину при указании одной опции -O100500. Эх, мечты-мечты...

P.S. Вики говорит, что SSE2 поддерживает и целочисленные вычисления в регистрах хmm, так что беру свои слова обратно, инты тоже можно там считать. Век живи, век учись...

Мои давние эксперименты с sse не увенчались особым успехом, так как он спасает очень редко, например, когда нужно в цикле посчитать комплесные числа, как в генерации фрактала Мандельброта, а вот для обработки графики, где постоянно идёт подгрузка из оперативной памяти новых данных, закачивание этих данных в xmm только отнимает драгоценные такты. В итоге они полезны только когда высока вероятность попадания данных в кэш, причем желательно первого уровня. Зато узнал, что можно писать в си на асме без асма через расширения gcc. Довольно прикольно.

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

RPG

Не-не, вот собираю я скажем GIMP 2.7, которого в репах до сих пор нет, а он автоматом ложится в /usr/local/bin и естественно перебивается тем гимпом, что лежит в /usr/bin. Наличие этой папки в PATH почему-то не спасает, в чем косяк до сих пор не понимаю...

какие папки?? в генте юзают ебильды, в слаке слакобильды, в других со сборкой хреново, но часто спасает костыль checkinstall. Так как вы не собирают НИГДЕ, даже в слаке, ибо это превращает систему в помойку.

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

это как?!

Ну скажем так, я написал код на чистом ассемблере, у меня везде xmm, movups и т. п. Засовываю прям как есть в компилятор с -O2 и -S чтобы увидеть ассемблерный код, созданный компилятором. И что вижу? Стандартные регистры, и сплошные fpu-инструкции.

начните отсюда: http://ru.wikipedia.org/wiki/SSE

Да, да, только не с SSE, а с SSE2. Там уже есть инт, снимаю шляпу.

от блин... ./configure --help, там в самом начале про --prefix написано.

Хм, надо попробовать, что-то я читал про него, но эффекта таки не добился, да и всё чаще вместо теплого лампового autotools попадается cmake или scons. Так что идея с перенастройкой системы на /usr/local мне больше нравится, главное чтобы ещё работало.

RPG
()
Ответ на: комментарий от drBatty

какие папки?? в генте юзают ебильды, в слаке слакобильды, в других со сборкой хреново, но часто спасает костыль checkinstall. Так как вы не собирают НИГДЕ, даже в слаке, ибо это превращает систему в помойку.

Я знаю, для чего нужен /usr/local, но не знаю какого генту у меня оно не работает:( Точнее работает, но только если в /usr/ нет аналога.

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

RPG

инты тоже можно там считать. Век живи, век учись...

ещё инты бывают разные. Например short int часто в 16 бит.

RPG

Зато узнал, что можно писать в си на асме без асма

на самом деле, gcc это коллекция компиляторов. А вовсе не один C. Т.е. вроде можете «писать на фортране без фортрана». Хотя в default linux возможно gcc кастрировали. Даже наверняка.

RPG

Мои давние эксперименты с sse не увенчались особым успехом, так как он спасает очень редко

редко, но метко. Естественно, тупая замена всего на SSE2 результата не даст. Вот если ручками...

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

заметь, порядок: /usr/local/bin стоит первой

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

умвр

У меня также. Просто лень искать причину, я не так часто пересобираю мир, последний раз патчил в очередной раз под себя Thunar (многим не понравились красные иконки, да и мне они не очень), когда сделал вывод временной метки в виде эмблемки «new».

И было лень во всем этом разбираться, так что да, я иногда прибегаю к костылям:)

И dpkg --force в случае чего поможет.

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