top
logo


Релиз набора компиляторов GCC 4.9 PDF Печать E-mail
22.04.14 16:48

После 13 месяцев разработки увидел свет релиз свободного набора компиляторов GCC 4.9. Новый выпуск примечателен реализацией поддержки OpenMP 4.0 и Cilk Plus, улучшением поддержки стандартов C++11 и C++14, режимом подсветки предупреждений и ошибок при выводе на экран, включением в состав детектора неопределенного поведения программы.

Основные изменения:

  • Реализована поддержка спецификации OpenMP 4.0 (Open Multi-Processing), определяющей API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран (в GCC OpenMP 4.0 пока доступен только для Си и Си++ ). В OpenMP 4.0 обеспечена поддержка ускорения за счет привлечения мощностей GPU, представлены значительные улучшения в модели выполнения задач, добавлены механизмы обработки ошибок, добавлена поддержка определенных пользователем редукций, обеспечена векторизация циклов с использованием инструкции SIMD, добавлен ряд расширений для поддержки параллельного выполнения на уровне задач;
  • Частично реализована поддержка набора расширений Cilk Plus, предлагающего новую эффективную методику параллельного программирования для языков Си и Си++, позволяющую существенно упростить разработку программ, части которых выполняются параллельно с задействованием разных процессорных ядер и векторных сопроцессоров (Vector Units). Для управления генерацией кода с улучшенной векторизацией предусмотрена pragma simd. Поддерживается два метода увеличения производительности - параллелизм данных и параллельное выполнение подпрограмм. В первом случае, обеспечиваются механизмы прозрачного распараллеливания типовых операций над массивами данных и автоматическое задействование SIMD-инструкций. Для организации параллелизма на уровне подпрограмм в обиход вводится три ключевых слова: _Cilk_spawn - запуск функции в параллельном режиме, _Cilk_sync - ожидание завершения параллельно выполняемой функции, и _Cilk_for - организация работы цикла в параллельном режиме. "_Cilk_for" в GCC пока не поддерживается.
  • Для языков C и C++ добавлен компонент UBSAN (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения, выявляющего во время выполнения программы ситуации, когда поведение программы становится неопределенным (зависит от реализации компилятора) из-за ошибки программиста. Для включения UBSAN следует использовать опцию "-fsanitize=undefined";
  • Улучшена работа оптимизаций во время динамического связывания (LTO, Link Time Optimization) и межпроцедурных оптимизаций, в которых устранена серия негативно сказывающихся на масштабируемости узких мест. В реализации межпроцедурных оптимизаций добавлен новый проход для выполнения спекулятивной девиртуализации (-fdevirtualize-speculatively), а также добавлен новый модуль с анализов наследования типов. В LTO переписан код слияния типов, новая реализация значительно быстрее и потребляет меньше памяти. Реализована техника раннего удаления виртуальных методов и загрузки функций по мере необходимости, что позволило снизить потребление памяти во время связывания. В итоге потребление памяти при сборке Firefox в отладочном режиме удалось сократить с 15 до 3.5 Гб, а время связывания уменьшить с 1700 до 350 секунд;
  • Улучшена техника оптимизации на основе обратной связи (Feedback directed). Добавлен новый проход для изменения порядка функций (-freorder-functions), позволяющий значительно сократить время запуска больших приложений;
  • Распределитель локальных регистров (Local Register Allocator), ранее доступный только для ia32 и x86-64, теперь адаптирован и включен по умолчанию для целевых архитектур Aarch64, ARM, S/390 и ARC, а также реализован в качестве опции для платформ PowerPC и RX;
  • Существенно расширена поддержка архитектуры ARM. Внесены оптимизации для процессоров Cortex-A15б, Cortex-M4, Cortex-A52, Cortex-A53 и Cortex-A57. Добавлены оптимизации для big.LITTLE. Обеспечена поддержка архитектуры ARMv8-A. Добавлены опции для поддержи процессоров Cortex-A12 (-mcpu=cortex-a12), Cortex-R7 (-mcpu=cortex-r7), Cortex-A53 - Cortex-A57 (-mcpu=cortex-a5x);
  • Поддержка новой little-endian платформы powerpc64le-linux для которой предлагается новый PowerPC ELFV2 ABI. Поддержка Power ISA 2.07, включая транзакционную память;
  • В компоненте Address Sanitizer обеспечена поддержка архитектуры ARM в дополнение к ранее поддерживаемым архитектурам x86 и x86_64. Address Sanitizer позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как обращение к областям памяти, после их освобождения ("use-after-free"), разрушение кучи, повреждение стека и переполнение буферов;
  • Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap;
  • Добавлена поддержка некоторых новшеств, развиваемых в рамках будущего стандарта C++14, например, реализованы массивы переменного размера, форма инициализации "[x = 42]{ ... };", разделители цифр (int j = 1'048'576;). В стандартную библиотеку С++ добавлена поддержка компонента "regex". Внесена серия улучшений, связанная с поддержкой стандарта C++11;
  • По реализации возможностей уровень поддержки стандарта C11 доведён до C99. В новой версии добавлена поддержка таких компонентов С11, как _Atomic, _Generic и _Thread_local. Добавлено новое Си-расширение __auto_type, предоставляющее для GNU C подмножество функциональности "auto" из C++11;
  • Улучшена поддержка языка ADA. GNAT переведён на использование по умолчанию стандарта ADA 2012, вместо ADA 2005;
  • В компиляторе для языка Fortran улучшена поддержка спецификации Fortran 2008 и добавлена поддержка Fortran 2003 finalization;
  • Обеспечена поддержка развиваемого компанией Google языка программирования Go 1.2.1;
  • Реализовано поддержка микроархитектур Intel Silvermont (-march=silvermont) и Broadwell (-march=broadwell), процессоров 15 семейства процессоров AMD (Excavator, -march=bdver4 и -mtune=bdver4), процессоров IBM Power8 и RX100, RX200 и RX600;
  • Для процессоров Intel добавлена поддержка инструкций AVX-512, которая может использоваться для целевых архитектур x86-64 и ia32;
  • Возможность подсветки текста выводимых ошибок и предупреждений ("-fdiagnostics-color=auto");
  • Объявлена устаревшей поддержка платформы Solaris 9 (*-*-solaris2.9), код для которой будет удалён в выпуске GCC 4.10. Компания Oracle прекратила стандартную поддержку Solaris 9 в 2011 году, расширенная платная поддержка завершится в октябре 2014 года.
  1. Главная ссылка к новости (http://gcc.gnu.org/ml/gcc/2014-04/msg001...)
  2. OpenNews: В условиях конкуренции с Clang Эрик Реймонд предложил отменить ограничения GCC в области плагинов
  3. OpenNews: Ричард Столлман указал на недопустимость проприетарных надстроек над GCC
  4. OpenNews: Для GCC подготовлен фронтэнд с поддержкой языка Rust, развиваемого проектом Mozilla
  5. OpenNews: Наиболее интересные новшества, ожидаемые в GCC 4.9
  6. OpenNews: Выпущен набор компиляторов GCC 4.8
Тип: Интересно / Программы
Ключевые слова: gcc, compile, (найти похожие документы)
При перепечатке указание ссылки на opennet.ru обязательно
Реклама
id=adv>
  1.1, MSlinux, 20:37, 22/04/2014 [ответить] [смотреть все] –4 +/
Теперь мы будем ждать новой версии Cygwin... весь текст скрыт [показать]
 
1.2, Константин, 20:44, 22/04/2014 [ответить] [смотреть все]  
+/
отличнейшая новость для тех кто любит все усорять без большого геммороя > Реализована поддержка спецификации OpenMP 4.0
 
  2.3, ананим, 20:54, 22/04/2014 [^] [ответить] [смотреть все] [показать ветку]  +2 +/
 
  3.17, metallica, 23:27, 22/04/2014 [^] [ответить] [смотреть все]  +/
>> усорять
> Хорошо сказал.
> И главное правда.

Из всех способов размножения потоков, самый практичный, удобный и даже элегантный-это API из omp.
Другие API, начиная от clone и заканчивая всякими boost::context, в сравнении с omp, кучи мусора просто.

 
  4.21, ананим, 00:41, 23/04/2014 [^] [ответить] [смотреть все]  +/
> Другие API, начиная от clone

Пинздёж. И это мягко говоря.
Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
И он настолько гибок, что в граничных условиях от потока ядра практически не отличается.
Первое.
Второе. По поводу "усорять" — не разделяю эйфорию из-за того, что теперь каждый юзерспейсный быдлoкод (чуть ли не на js) способен зaсрaть все 8 процов на все 100% каждый.
Не, отрубим конечно, но задолбали.

 
  5.25, Crazy Alex, 02:34, 23/04/2014 [^] [ответить] [смотреть все]  +2 +/
Насчет "засрать" поддерживаю, но omp таки удобно там, где нужно просто наплодить потоки, что-то посчитать и успокоиться. Руками для этого потоки ляпать - это искать себе проблемы там, где их можно избежать - так как получите больший объем вашего кода и, соответственно, больше шансов поймать баг. а в многопоточке их ловить - то ещё удовольствие, особенно на сях.
 
5.33, Аноним, 06:31, 23/04/2014 [^] [ответить] [смотреть все]  +1 +/
Прописывать лимиты на процесс снова внезапно в цене Дык это - скорее хорошо ... весь текст скрыт [показать]
 5.45, metallica, 11:27, 23/04/2014 [^] [ответить] [смотреть все]    [к модератору]  –1 +/ >> Другие API, начиная от clone
> Пинздёж. И это мягко говоря.
> Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
> И он настолько гибок, что в граничных условиях от потока ядра практически
> не отличается.

Как ещё изящнее могу запустить пару потоков, чем так?

[code]

#pragma omp parallel num_threads(2)
{

prl();

  }

[/code]

 
      8.48, анонимище, 12:57, 23/04/2014 [^] [ответить] [смотреть все]    [к модератору]  –1 +/
> Ничего изящного. А если 30 потоков? И чтоб без циклов.

Что за дурные ограничения, парниша. Я так же могу:
А сделай с OMP что пользователь вводит сколько потоков запускать, но omp_set_num_threads не использовать!

 
  9.49, pavlinux, 14:33, 23/04/2014 [^] [ответить] [смотреть все]    [к модератору]  +/
#pragma omp parallel for
for (i=0, i < 20; i++)
     pthread_create(thread[i], ......);
 
2.6, Вук, 21:20, 22/04/2014 [^] [ответить] [смотреть все] [показать ветку]  –1 +/ 
1.4, Аноним, 21:15, 22/04/2014 [ответить] [смотреть все]  –1 +/
Ждем-с чем ответит Цланг, хо-хо-хо ... весь текст скрыт [показать]
 
  2.32, Аноним, 04:43, 23/04/2014 [^] [ответить] [смотреть все] [показать ветку]  +/
Что значит догонять Во-первых, он никогда не был отстающим, он шёл и идёт парал... весь текст скрыт [показать] [показать ветку]
 
1.7, Аноним, 21:27, 22/04/2014 [ответить] [смотреть все]  +/
Никто не знает, как работает UBSAN И что за неопределённое поведение ... весь текст скрыт [показать]
 
  2.8, _, 21:55, 22/04/2014 [^] [ответить] [смотреть все] [показать ветку]  +1 +/
 
2.9, Vkni, 21:55, 22/04/2014 [^] [ответить] [смотреть все] [показать ветку]  –1 +/ 2.26, Crazy Alex, 02:37, 23/04/2014 [^] [ответить] [смотреть все] [показать ветку]  +/ Если вы не знаете, что такое неопределенное поведение - для начала надо хотя бы одну хорошую книгу по сям или плюсам прочесть. Потому что это понятие будет в ЛЮБОМ хоть сколько-нибудь приличном учебнике. И если вы его не знаете - значит либо учились по чему-то совсем печальному либо читали крайне невнимательно.
 2.50, pavlinux, 14:48, 23/04/2014 [^] [ответить] [смотреть все] [показать ветку]    [к модератору]  +/ > И что за неопределённое поведение?

Это когда ничего не делаешь, а оно делается и при это ошибки не возникает.
И при этом думаешь, почему оно что-то сделало, и ничего не произошло, ведь
я что-то не делал, а оно сделало, но не должно было так как я сделал, чтоб
ничего не делало.    О_о

 
1.11, Аноним, 22:18, 22/04/2014 [ответить] [смотреть все]  +/
К сожалению, не попало Кроме этого, в состав GCC 4 9 имеют шанс попасть библио... весь текст скрыт [показать]
  1.13, Аноним, 22:42, 22/04/2014 [ответить] [смотреть все]  +/
Релиз набора компиляторов GCC 4.9... весь текст скрыт [показать]
 
  2.15, cdome, 23:04, 22/04/2014 [^] [ответить] [смотреть все] [показать ветку]  +/
-fsanitize=address
 
1.19, kachsheev, 23:54, 22/04/2014 [ответить] [смотреть все]  +/ Интересно, когда-нибудь из thread уберут макрос проверки версии языка/компилятора?
 
  2.51, Аноним, 15:36, 23/04/2014 [^] [ответить] [смотреть все] [показать ветку]     [к модератору]  +/
 
  3.53, kachsheev, 16:33, 23/04/2014 [^] [ответить] [смотреть все]    [к модератору]  +/
Желаю Вам успешно скомпилировать Linux клэнгом.
 
  4.54, Аноним, 17:23, 23/04/2014 [^] [ответить] [смотреть все]     [к модератору]  +/
FreeBSD скомпилировали Над Linux усиленно работают Если чере пару минорных рел... весь текст скрыт [показать]
 
  5.55, kachsheev, 17:48, 23/04/2014 [^] [ответить] [смотреть все]    [к модератору]  +/
Похлопаю, порадуюсь и продолжу использовать OpenMP с gcc.
 
1.20, Аноним, 00:29, 23/04/2014 [ответить] [смотреть все]  +/
А std function всё так же память выделяет на каждый чих, млять, вместо того, чт... весь текст скрыт [показать]
  1.36, Аноним, 07:43, 23/04/2014 [ответить] [смотреть все]  +/
вау сколько ВСЕГО полезного и Нужного из оффтопа скоро Эскаватор и Пауэр... весь текст скрыт [показать]
 
Ваш комментарий  

Read more http://www.opennet.ru/opennews/art.shtml?num=39621

 
Интересная статья? Поделись ей с другими:

bottom

 

Unreal Commander PfSense по русски Яндекс.Метрика