LINUX.ORG.RU

[бенчмарк] gcc vs icc


0

0

http://multimedia.cx/eggs/icc-vs-gcc-smackdown-round-3/#more-1225

будьте внимательны, в коде есть наше любимое rm -rf

А так результаты интересные - gcc-4.4 (svn r143046) показывает на чистом C (--disable-amd3dnow --disable-amd3dnowext --disable-mmx --disable-mmx2 --disable-sse --disable-ssse3 --disable-yasm) для ffmpeg скорость на 25% выше, чем gcc 4.2 и 4.3. Gcc 3.4.6 и 4.1.2 самые скоростные из gcc. (У меня на нормальной сборке mplayer'а все же 4.2 был быстрее 3.4.6, а 4.3 .3 сейчас быстрее 4.2.4 gcc-svn пока не удосужился собрать.)

Меряется скорость декодирования. Желающие могут модифицировать исходник

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

> p.s. на производительность давно пох

Расскажи это тем, кто десятками часов перекодирует видео или месяцами что-то считает на кластерах. Я уверен - им далеко не пох на прирост производительности в 20% =).

Deleted
()

не интересно, тем более с rm -rf

ICC Core2, PGO 32 bit

vs

64 bit GCC 4.3.3 -march=nocona -msahf -msse3 без PGO

сливает около 10%

хотя тот же lzma32 c2/pgo быстрее GCC компилированого варианта на 10-12%
вот и все сравнение...

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

на десктопе и в разнородных средах в целом оптимизация предоставляемая GCC достаточно удовлетворительная

а вот для специализированых проектов, сборка конечно желательна оптимальным образом

ICC + вся оптимизация для архитектуры (32 или 64 бит Интел) + PGO

Интел потому что ICC для ARM и прочего нет и как оно ведет себя на АМД не совсем понятно, будет прирост или не будет.

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

>кто десятками часов перекодирует видео

обычно у них видео, которое непересмотреть и за всю жизнь

>месяцами что-то считает на кластерах.


там алгоритм важнее

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

Хотеть быстрый отклик системы!

Для этого мы берём Reiser4, tmpfs, много-много памяти, собираем всё с -z now, выкидываем иксы, на их место втыкаем Wayland и... не, нас не тошнит от cairo, мы думаем как быстро всё не работает!

wyldrodney
()

--disable-mmx --disable-mmx2 --disable-sse --disable-ssse3 --disable-yasm
icc configuration compiled with --cpu=core2 --parallel

вот за это незачет автоматом
сравнить код без расширений с математикой на 387
с тем что раскидал ICC используя ssse3 , все это очень и очень некорректно

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

и еще
на multimedia кодеках не совсем корректно заниматься тестированием производительности компилятора, результаты неточные из за того , что
в кодеках обычно кусочки на ассемблере попадаются, причем для наиболее нагружающих функций

лучше тестировать с помощью архиватора

gzip (c)
lzma (c++)

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

> --disable-mmx --disable-mmx2 --disable-sse --disable-ssse3 --disable-yasm
> icc configuration compiled with --cpu=core2 --parallel


> вот за это незачет автоматом

> сравнить код без расширений с математикой на 387

> с тем что раскидал ICC используя ssse3 , все это очень и очень некорректно


Какраз таки корректно ИМХО. Этими опциями --disable-* (они не для компилятора, а для configure-скрипта) выключили ассемблерные вставки в ffmpeg. И тем самым доверили полностью всю оптимизацию копиляторам.

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

> на multimedia кодеках не совсем корректно заниматься тестированием производительности компилятора, результаты неточные из за того , что
> в кодеках обычно кусочки на ассемблере попадаются, причем для наиболее нагружающих функций


Именно для этого ассемблерные вставки и выключили.

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

>Этими опциями --disable-* (они не для компилятора, а для configure-скрипта) выключили ассемблерные вставки в ffmpeg.

Разве часть кода попросту не переписана на асме? Хоть и под несколько архитектур..

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

> Разве часть кода попросту не переписана на асме? Хоть и под несколько архитектур..

Там для всего кода на асме есть аналог на чистом C. На случай если под конкретную архитектуру ещё не успели переписать на асме или там это вообще не имеет смысла (SIMD есть не везде).

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

одно дело если в configure они отключали
другое дело если они так и собрали, если собрали - незачет
если ради того чтобы отключить ассемблер - сойдет )

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

>в gzip как раз нету, в bzip2 есть

http://www.linuxfromscratch.org/hlfs/view/unstable/glibc-2.6/chapter05/gzip.html

"By default Gzip uses assembly code. While this may preform better, it is not position independent. The assembly code causes text relocation which is disallowed by options in PaX/Grsec kernels. The DEFS environment variable is set to use only C code."

http://gentoo-portage.com/AJAX/Ebuild/49540/View

Не стоит спорить :) Я редко говорю то, в чём не уверен.

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

gzip 1.3.x

lib/match.c
/* match.s -- optional optimized asm version of longest match in deflate.c

нда, придется для тестов искать место где это optional отключается и включается альтернатива на C

иначе не совсем честный и полный тест выходит

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

странно сделали ) обычно делают

--disable-asm в configure

спасибо, а то я обычно компилятор на gzip'e или lzma (хм, а там случаем в LZMA SDK не затесалось ничего?) мучаю, получается что часть функций для сравнения выпадает, и сравнение идет только по менее используемым функциям, что приводит к усреднению результата.

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

~/tmp :$pipebench < test | time ./gzip.asm > /dev/null
Summary:
Piped 634.74 MB in 00h00m36.86s: 17.21 MB/second
35.83user 0.25system 0:36.85elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+214minor)pagefaults 0swaps

~/tmp :$pipebench < test | time ./gzip.noasm > /dev/null
Summary:
Piped 634.74 MB in 00h00m26.60s: 23.85 MB/second
25.95user 0.13system 0:26.61elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+214minor)pagefaults 0swaps


и весьма неожиданный результат... assembler замедляет !? ;)

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

~/tmp :$pipebench < test | time ./gzip.noasm.icc > /dev/null
Summary:
Piped 634.74 MB in 00h00m24.97s: 25.41 MB/second
24.32user 0.12system 0:24.97elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+247minor)pagefaults 0swaps

ICC 10.1

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

смотрела, но пока-что у XZ распространенность не очень, в отличие от предыдущих lzma , в принципе там есть совместимость со старым форматом
--lzma1
--lzma2 (новый, он же по умолчанию)
ключики

ну и не знаю как там чуть сильнее, был бы он чуть быстрее ) Ну и код раскидать на SMP было бы совсем неплохо, 7-zip , который использует тот же lzma способен работать на 2 ядрах, правда не полностью утилизует, но хоть что-то

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

переделала тест с странностями (еще 3 измерения для каждого)

asm 24.73 MB/second
noasm 23.87 MB/second

видимо это 1% в нагрузке на процессор так сказался, что-то помешало )

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

>код раскидать на SMP было бы совсем неплохо

В gcc-4.4 уже встроен код из проекта Graphite, так что скоро мы сможем наблюдать прирост в 30-40% на некоторых задачах, AFAIR :)

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

этот прирост включен всегда для любого кода или надо флажки ставить отдельные или нужна поддержка в коде #pragma и т п ?

и что лучше PPL или Cloog ? 4.4.0-experimental вроде поддерживает либо то, либо другое.
У меня с PPL , который собран ICC ;)

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

ps: регрессий пока много,
mplayer например новым gcc полностью не собирается, на один какой то файл выдает ошибку, хотя все остальное собирается и работает

wine собирается, но работает плохо, в windows приложениях ошибки памяти часто и вообще глюки

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

у меня снапшот от 2009 02 28

последний лежит на ftp - от пятницы 13 ) соберу сейчас

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

>mplayer например новым gcc полностью не собирается, на один какой то файл выдает ошибку, хотя все остальное собирается и работает

Гугление по ошибке не помогло? Думаю, патч уже есть.

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

по ошибкам cборки mplayer гуглить бесполезно)
там исправляют быстрее чем гугль индексирует

хотя вот оно, текущий транк mplayer

In file included from liba52/imdct.c:728:
liba52/imdct_3dnow.h: In function 'T.43':
liba52/imdct_3dnow.h:289: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:283: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:289: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:283: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:289: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:283: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:289: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:257: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:283: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:289: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:257: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
liba52/imdct_3dnow.h:117: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:283: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:286: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:286: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:289: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:292: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:292: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:93: error: 'asm' operand has impossible constraints
liba52/imdct_3dnow.h:117: error: 'asm' operand has impossible constraints

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

Возможно, проблема с liba52.

Я бы не стал собирать его gcc-4.4 без упоминания в рассылке факта работоспособности, как минимум)

Есть необходимость в использовании gcc-4.4 для mplayera?

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

ну он собирается (за исключением этого файла) и работает
производительность не проверяла, явных тормозов, как и явного прироста - нет

необходимости тоже особенно нет, собираю просто ради проверки собираемости и работоспособности.
А так обычно - 4.3.3

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

Код только недавно принят. Да и я не уверен что само распараллеливание циклов включается автоматом: попадалось на глаза упоминание о использовании отдельной опции компилятора.

Но проще посмотреть, чем гуглить ;)

Вспоминается как собирал ради слежения за прогрессом и профита... Это затягивает)

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

> +/- 20% не влияют

сразу видно человека, который не занимался числодробильней

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

> и весьма неожиданный результат... assembler замедляет !? ;)

компиляторы уже давно многие вещи умеют оптимизировать лучше человека

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