LINUX.ORG.RU

GCC 4.6.0

 , ,


0

1

Вышла новая версия GNU Compiler Collection — 4.6.0.

Новшества:

  • улучшения в использовании памяти и скорости компиляции;
  • поддержка языка программирования Go;
  • новый уровень оптимизации -Ofast, который включает в себя все ключи из -O3 и ключи, позволяющие получить ещё более оптимизированный код, например -ffast-math;
  • улучшения в LTO (Link-Time Optimization);
  • улучшения в IPO (межпроцедурная оптимизация);
  • на 32-х битных системах теперь по умолчанию задействован ключ -fomit-frame-pointer (кроме -Os).

Добавлена поддержка следующих процессоров:

  • Intel Core i3/i5/i7 (-march=corei7, -mtune=corei7);
  • Intel Core i3/i5/i7 с новым набором инструкций — AVX (-march=corei7-avx, -mtune=corei7-avx);
  • AMD Bobcat (-march=btver1, -mtune=btver1).

Анонс

>>> Полный список изменений

★★★★

Проверено: hibou ()
Последнее исправление: post-factum (всего исправлений: 7)
Ответ на: комментарий от Sylvia

gcc-config конечно хорошо
но не представляю как оно будет работать с несколькими пакетами одновременно, которые просят разные версии компилятора...

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

Именно.

Ну да, а вот этого бы и хотелось.

Придётся написать bashrc, чтобы сначала брал список наборов компиляторов из файла, причём в стиле «GNU-4.4.4», «GNU-4.5.2», «INTEL», «GNU-4.5.2-CC_INTEL_FC», и отдельно из файлов стандартные флаги к ним и то, какие компиляторы для C, C++ и ForTran использовать (т.е. прмямо прописано в записи, где лежат CC, CPP, FC, какие флаги для Фортрана и какие для C). И тогда в файле package.compilers можно просто писать те пакеты, которые не обрабатываются записью по умолчанию, и имя набора компиляторов, на манер того, как используется package.use. Ну и сохраняется стандартный интерфейс через env-директории для override стандартных флагов.

Надо будет на следующих выходным помучиться.

Crazy_Doctor
()

на 32-х битных системах теперь по умолчанию задействован ключ -fomit-frame-pointer (кроме -Os)

Раньше не включали, потому что отладка затрудняется. А теперь почему передумали?

unsigned ★★★★
()
Ответ на: Именно. от Crazy_Doctor

ну я сделал так
для icc есть стандартная (по вики) костылина с packages.icc
а для версий есть packages.compilers которая объявляет разную ROOTPATH для пакетов, записанных в виде «пакет версия_гцц»

#COMPILERS
if [ -f ${ROOT}/etc/portage/package.compilers ]; then
   while read target ver; do
      if [ "${target}" = "${CATEGORY}/${PN}" ]; then
      export ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/$ver:$ROOTPATH"
      fi
   done < ${ROOT}/etc/portage/package.compilers
fi
[ megabaks@desktop ] ~ $ cat /etc/portage/package.compilers
dev-util/nvidia-cuda-sdk 4.4.5
[ megabaks@desktop ] ~ $

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

потому что всем похер и сие задействуют все, кроме тупоголовых ментайнеров
К.О.

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

и даже не amd64, как на платформах отличающихся от x86 - надо смотреть отдельно, я не скажу.

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

Продолжу бенчмарки

~amd64, i3-2100T

gcc 4.3.5 (=native): 0m56.528s
gcc 4.5.2 (=native): 0m57.988s

$ ./analyze-x86 bzip2-4.3.5 
instructions:
 cpuid: 0        nop: 56         call: 0         count: 3689
 i686:   6
 mmx:    14
 sse2:   37
$ ./analyze-x86 bzip2-4.5.2 
instructions:
 cpuid: 0        nop: 66         call: 0         count: 3758
 i686:   10
 mmx:    11
AVX:     7
С одной стороны - avx и новый гцц не нужны, с другой - разница совсем не в не в полтора раза.

Где ебилд под гцц-4.6 есть?

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

это avx то не нужен?
да ты упоротый!
это практически 64-бит sse* на 32 бит
а про 64 вообще молчу
не позорься больше так

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

Я вижу, что с avx медленнее, чем без него. И к какому неправильному выводу я должен был придти?

Щас 4.6 соберётся, ещё вброшу.

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

у меня вообщем-то есть предположение почему так, SSE инструкций нет, если есть AVX, они их заменяют, причем заменяют в гораздо меньшем количестве, вполне возможно, что код с SSE просто генерируется GCC гораздо более оптимальный, чем эквивалентный ему AVX. Так ли это на самом деле - стоит смотреть листинги, чего там нагенерировалось )

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

Собрано-то не только с avx и без него, но и разными версиями gcc. А без avx разница была намного больше:

>gcc 4.3.5 (=native) - 0m51.831s

против

>gcc 4.4.5 (=native) - 1m13.317s (упс!)

gcc 4.5.3pre (=native) - 1m24.156s (еще «лучше»)

А вот теперь один и тот-же компилятор (4.6.0-pre9999 20110328 (prerelease) rev. 171601), но разные -march:

native: 0m56.267s

$ ./analyze-x86 bzip2-4.6.0-native 
instructions:
 cpuid: 0        nop: 45         call: 0         count: 3498
 i686:   13
 mmx:    11
 AVX:     7

corei7: 0m58.403s
$ ./analyze-x86 bzip2-4.6.0-corei7 
instructions:
 cpuid: 0        nop: 63         call: 0         count: 3526
 i686:   13
 mmx:    16
 sse2:   42
Итого: из 4х тестов, наиболее быстрый bzip2 собирает 4.6.0+avx, но разница в скорости невелика.

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

Не на тех задачах меряетесь. 7 инструкций avx. Круто, их 100 раз исполним и что ??? какой прирост вы ожидаете ???

Нужно мерится на задачах, которые «построены» на sse2 ( в которых много математики ). Например, C-Ray v1.1, V-Ray, Blender и др.

З.Ы. С нетерпением жду результатов )))

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

Спасибо.

Спасибо за вариант. Пойдёт на каннибализм. :-)

А задумался серьёзно об этом именно после теста Сильвии и после того, как вчера или позавчера emerge отказался собирать nvidia-cuda-sdk с только что скомпилённым 4.5.2. :-)

Crazy_Doctor
()
Ответ на: Спасибо. от Crazy_Doctor

>emerge отказался собирать nvidia-cuda-sdk с только что скомпилённым 4.5.2.
я после этого и сделал )
остальное собирается нормально

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

Ну вышло-то, что 7 инструкций avx быстрее, чем 42 sse2. Результатов по тем приложениям (от меня) не будет, т.к. они тянут за собой графику туда, где она не в тему, а на других машинах нет avx. Но про bzip2 дополню:

-O2    0m56.381s 0m56.519s 0m56.468s
-O3    0m56.061s 0m56.041s 0m56.449s
-Ofast 0m58.430s 0m58.520s 0m58.794s
Вот такой интересный fast.

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

> надо брать bzip2 , компилить с -pg и смотреть в каких функциях отмечается наибольшее возрастание времени потребления процессора, потом смотреть код этих функций, оптимальный вариант - найти кусок кода , который плохо оптимизируется начиная с 4.4, и сделать из него testcase

Если этот замечательный процесс будет проделан - можно скинуть в этом же треде ссылку на получившийся тесткейс или пост в рассылке gcc?

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

>а у гентушников по любому есть выигрыш

Сами себе же противоречите, как и фактам.

Алсо, допилили бы утилиту под amd64, там делов-то.

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

а на Сильвию можешь не надеяться - она давно уже сказала: «Мне это не интересно»

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

Всё так. И avx там был не весь. На самом деле инструкций генерится больше.

instructions:
 cpuid: 0        nop: 66         call: 352       count: 3758
 i686:   10
 mmx:    11
 AVX:    47

Если кому интересно - patch.

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

Согласен, но я часто сижу и часами что-то читаю. Или смотрю фильмы. И компиляция в фоне мне абсолютно не мешает. Когда gentoo пробовал, не знал о возможности понижать приоритет компилятора, поэтому люто не любил любую компиляцию, и очень уважал Python. Потом я узнал, что собирать что-то(слава богу, не мир, как в Gentoo) можно без лишних мучений, да и система PKGBUILD-ов очень удобна и проста. И собираю я только тогда что-то, когда возможностей стабильной/нестабильной версии не хватает, нужно брать из Git'а прогу. Убуноводов часто спасает PPA, а у Debian и Arch такой шары нет.

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

Упс, а у меня ещё и дебиан unstable, развёрнутый через debootstrap. Так что боюсь, мне много нехорошего узнать о себе прийдётся:) Но Arch люблю, за KISS и бритву Оккама.

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

Исправленная версия на grep, внезапно работает быстрее, чем сишная с -О2, лол):

$ time sh tst.sh /bin/bash
nop: 6097
call: 9758
i686: 322
sse: 88

real	0m1.930s
user	0m1.720s
sys	0m0.130s

$ time ./analyse /bin/bash
instructions:
 cpuid: 0	 nop: 1478	 call: 9758	 count: 109596
 i686:	 322
 mmx:	 719
 sse:	 88

real	0m2.186s
user	0m2.157s
sys	0m0.017s

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

man cache?

[ megabaks@desktop ] ~/ $ time sh test /usr/bin/mplayer
cpuid: 12
nop: 28052
call: 48932
i486: 3980
i586: 3
i686: 6448
mmx: 60797
sse: 21721
sse2: 73490
3dnow!: 713
3dnowext: 2972
sse3: 530
ssse3: 368
sse4.1: 59
sse4.2: 4

real    0m13.766s
user    0m12.971s
sys     0m0.707s
[ megabaks@desktop ] ~/ $ time ./analyze-x86 /usr/bin/mplayer
instructions:
 cpuid: 12       nop: 28050      call: 48932     count: 1402088
 i486:   3978
 i586:   3
 i686:   6448
 mmx:    60797
 3dnow!:         713
 3dnowext:       13
 sse:    21539
 sse2:   13820
 sse3:   530
 ssse3:  417
 sse4.1: 3   

real    0m7.500s
user    0m10.743s
sys     0m0.040s
[ megabaks@desktop ] ~/ $ 
и да - откуда взялось sse4.2? o_O

megabaks ★★★★
() автор топика

*gcc-4.6.0 (03 Apr 2011)
03 Apr 2011; Ryan Hill (dirtyepic) +gcc-4.6.0.ebuild,
metadata.xml:
Version bump.


кто там ждет еще ебилды?

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

Кажется, я знаю, чем займу свой компьютер в ближайшие часов шесть -D

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

на опеннете мне посоветовали вот чего ( я правда пока не проверяла, некогда ):

Сообщение от FFASM (ok) on 28-Мрт-11, 22:37

>>> Mplayer кстати с 4.6 пока работает некорректно (mp3 звук со свистом) >> Работает, если использовать mpg123 либу для декодирования. > пробовала, свистит также > проблема не в libmad или mpg123, а где-то в другом.

Ну я как бы тоже не с потолка это взял. Да и странно что бы проблема была в чем-то другом, если только mp3 свистит.

Убедитесь что при запуске у вас пишет «Opening audio decoder: [mpg123]», а не что-либо другое. Да и можно отдельно mpg123 потеснить, если он у вас не работает, то без комментариев.

В gentoo оно мне компилит после такого configure:

./configure --cc=x86_64-pc-linux-gnu-gcc --host-cc=x86_64-pc-linux-gnu-gcc --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib64 --confdir=/etc/mplayer --datadir=/usr/share/mplayer --mandir=/usr/share/man --disable-svga --disable-svgalib_helper --disable-ass-internal --disable-arts --disable-kai --enable-networking --disable-joystick --disable-nemesi --disable-bl --disable-bluray --disable-fribidi --disable-cdparanoia --disable-dvdread-internal --disable-libdvdcss-internal --charset=UTF-8 --disable-tv-bsdbt848 --disable-ivtv --disable-pvr --disable-radio-v4l2 --disable-radio-bsdbt848 --disable-musepack --disable-libmpeg2-internal --disable-mp3lame --disable-mp3lame-lavc --disable-mp3lib --disable-libbs2b --disable-librtmp --disable-libopencore_amrnb --disable-libopencore_amrwb --disable-libmpeg2 --disable-mng --disable-tga --disable-xanim --codecsdir=/usr/lib64/codecs --disable-win32dll --disable-directfb --disable-aa --disable-fbdev --disable-caca --disable-zr --disable-mga --disable-xmga --disable-3dfx --disable-tdfxvid --disable-tdfxfb --disable-xvr100 --disable-pulse --disable-gui --disable-dxr3 --disable-ggi --disable-xinerama --disable-dga1 --disable-dga2 --enable-menu --disable-vidix --disable-vidix-pcidb --disable-xvmc

То есть явно стоит "--disable-mp3lib"

После чего пишет в «Disabled optional drivers:»: mp3lib(internal) Хотя mpg123, libmad, twolame присутствует.

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

@system входит в @world, к тому же пересобирать всё и сразу - совсем не обязательно.
можно просто собрать gcc и обновления уже собирать им, для постепенной миграции.

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

MPlayer SVN-r33190-4.6.0 (C) 2000-2011 MPlayer Team
Requested audio codec family [mp3] (afm=mp3lib) not available.
Enable it at compilation.
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 44100 Hz, 2 ch, s16le, 160.0 kbit/11.34% (ratio: 20000->176400)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)


не свистит с --disable-mp3lib (убрать USE mp3 для mplayer)

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