После 13 месяцев разработки увидел свет (http://gcc.gnu.org/ml/gcc/2014-04/msg00195.html) релиз свободного набора компиляторов GCC 4.9 (http://gcc.gnu.org/gcc-4.9/). Новый выпуск примечателен реализацией поддержки OpenMP 4.0 и Cilk Plus, улучшением поддержки стандартов C++11 и C++14, режимом подсветки предупреждений и ошибок при выводе на экран, включением в состав детектора неопределенного поведения программы.
Основные изменения (http://gcc.gnu.org/gcc-4.9/changes.html):- Реализована поддержка спецификации OpenMP 4.0 (http://www.opennet.me/opennews/art.shtml?num=37635) (Open Multi-Processing), определяющей API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран (в GCC OpenMP 4.0 пока доступен только для Си и Си++ ). В OpenMP 4.0 обеспечена поддержка ускорения за счет привлечения мощностей GPU, представлены значительные улучшения в модели выполнения задач, добавлены механизмы обработки ошибок, добавлена поддержка определенных пользователем редукций, обеспечена векторизация циклов с использованием инструкции SIMD, добавлен ряд расширений для поддержки параллельного выполнения на уровне задач;
- Частично реализована поддержка набора расширений Cilk Plus (hhttps://www.cilkplus.org/), предлагающего новую эффективную методику параллельного программирования для языков Си и Си++, позволяющую существенно упростить разработку программ, части которых выполняются параллельно с задействованием разных процессорных ядер и векторных сопроцессоров (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) и межпроцедурных оптимизаций, в которых устранена серия негативно сказывающихся на масштабируемости узких мест. Улучшена техника оптимизации на основе обратной связи (Feedback directed);
- Распределитель локальных регистров (Local Register Allocator), ранее доступный только для ia32 и x86-64, теперь адаптирован и включен по умолчанию для целевых архитектур Aarch64, ARM, S/390 и ARC, а также реализован в качестве опции для платформ PowerPC и RX;
- Существенно расширена поддержка архитектуры ARM, внесены оптимизации для процессоров Cortex-A53 и Cortex-A57;- Поддержка новой little-endian платформы powerpc64le-linux для которой предлагается новый PowerPC ELFV2 ABI;
- В компоненте Address Sanitizer обеспечена поддержка архитектуры ARM в дополнение к ранее поддерживаемым архитектурам x86 и x86_64. Address Sanitizer позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как обращение к областям памяти, после их освобождения ("use-after-free"), разрушение кучи, повреждение стека и переполнение буферов;
- Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap;
- Добавлена поддержка некоторых новшеств, развиваемых в рамках будущего стандарта C++14. Внесена серия улучшений, связанная с поддержкой стандартов C11 и C++11, например, в стандартную библиотеку С++ добавлена поддержка компонента "regex";
- Улучшена поддержка языка ADA. GNAT переведён на использование по умолчанию стандарта ADA 2012, вместо ADA 2005;- В компиляторе для языка Fortran улучшена поддержка спецификации Fortran 2008 и добавлена поддержка Fortran 2003 finalization;
- Обеспечена поддержка развиваемого компанией Google языка программирования Go 1.2.1;
- Реализована поддержка чипов Intel Silvermont, процессоров IBM Power8 и процессоров RX100, RX200 и RX600;
- Для процессоров Intel добавлена поддержка инструкций AVX-512, которая может использоваться для целевых архитектур x86-64 и ia32;- Возможность подсветки текста выводимых ошибок и предупреждений ("-fdiagnostics-color=auto");
- Объявлена (http://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html) устаревшей поддержка платформы Solaris 9 (*-*-solaris2.9), код для которой будет удалён в выпуске GCC 4.10. Компания Oracle прекратила стандартную поддержку Solaris 9 в 2011 году, расширенная платная поддержка завершится в октябре 2014 года.
URL: http://gcc.gnu.org/ml/gcc/2014-04/msg00195.html
Новость: http://www.opennet.me/opennews/art.shtml?num=39621
Теперь мы будем ждать новой версии Cygwin
> Теперь мы будем ждать новой версии CygwinЧувак, не мучай себя, переходи на пингвины :). Это я тебе как бывший юзер цыгвина и msys говорю. Если уж хочется могущество гнутого инструментария и *никсовых утилей - виндой при этом пользоваться столь же удобно, сколь удобно бежать стометровку в ластах и противогазе.
отличнейшая новость для тех кто любит все усорять без большого геммороя > Реализована поддержка спецификации OpenMP 4.0
> усорятьХорошо сказал.
И главное правда.
>> усорять
> Хорошо сказал.
> И главное правда.Из всех способов размножения потоков, самый практичный, удобный и даже элегантный-это API из omp.
Другие API, начиная от clone и заканчивая всякими boost::context, в сравнении с omp, кучи мусора просто.
> Другие API, начиная от cloneЛожь. И это мягко говоря.
Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
И он настолько гибок, что в граничных условиях от потока ядра практически не отличается.
Первое.
Второе. По поводу "усорять" — не разделяю эйфорию из-за того, что теперь каждый юзерспейсный быдлoкод (чуть ли не на js) способен зaсрaть все 8 процов на все 100% каждый.
Не, отрубим конечно, но задолбали.[сообщение отредактировано модератором]
Насчет "засрать" поддерживаю, но omp таки удобно там, где нужно просто наплодить потоки, что-то посчитать и успокоиться. Руками для этого потоки ляпать - это искать себе проблемы там, где их можно избежать - так как получите больший объем вашего кода и, соответственно, больше шансов поймать баг. а в многопоточке их ловить - то ещё удовольствие, особенно на сях.
> Насчет "засрать" поддерживаю, но omp таки удобно там, где нужно просто наплодить
> потоки, что-то посчитать и успокоиться.(внимательно осматривая снова) что-то мне std.parallelism из D больше нравится.
Прописывать лимиты на процесс снова внезапно в цене? :)
Дык это - скорее хорошо чем плохо.
>> Другие API, начиная от clone
> Пинздёж. И это мягко говоря.
> Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
> И он настолько гибок, что в граничных условиях от потока ядра практически
> не отличается.Как ещё изящнее могу запустить пару потоков, чем так?
#pragma omp parallel num_threads(2)
{prl();
}
> Как ещё изящнее могу запустить пару потоков, чем так?std::thread(prl).detach();
std::thread(prl).detach();
>> Как ещё изящнее могу запустить пару потоков, чем так?
> std::thread(prl).detach();
> std::thread(prl).detach();Ничего изящного. А если 30 потоков? И чтоб без циклов.
> Ничего изящного. А если 30 потоков? И чтоб без циклов.Что за дурные ограничения, парниша. Я так же могу:
А сделай с OMP что пользователь вводит сколько потоков запускать, но omp_set_num_threads не использовать!
#pragma omp parallel for
for (i=0, i < 20; i++)
pthread_create(thread[i], ......);
Создавать несколько потоков только для того, чтобы каждый из них породил по ещё одному потоку — это ппц...
Чаво?
> Создавать несколько потоков только для того, чтобы каждый из них породил по
> ещё одному потоку — это ппц...Вы там что, форкбомбу оптимизируете под мнеогоядерность? :)
А вы из тех, кто любит удалять всё "лишнее" из рабочей системы? Гг
Ждем-с чем ответит Цланг, хо-хо-хо!
Что значит догонять? Во-первых, он никогда не был отстающим, он шёл и идёт параллельным курсом, и, надо сказать, это gcc сильно свернуло в его сторону, иначе так бы и сидело с нечитабельными варнингами и дубовой архитектурой в которой нельзя разобраться. А то что он отстаёт по каким-то фичам - так gcc отстаёт по другим.
Никто не знает, как работает UBSAN? И что за неопределённое поведение?
http://stackoverflow.com/questions/20738232/gcc-4-9-undefine...
> Никто не знает, как работает UBSAN? И что за неопределённое поведение?Как работает - не знаем. Что такое UB - вот:
http://www.viva64.com/ru/t/0066/
Жаль что вам не объяснили что пиарить проприетарный win-only продукт при рассказе о тривиальной вещи, которая описана в вике - некультурно, а за данный маневр на ресурсе по открытым технологиям - двукратный бонус к вашей наглости.
> Жаль что вам не объяснили что пиарить проприетарный win-only продукт при рассказе
> о тривиальной вещи, которая описана в вике - некультурно,Некультурно делать в слове из 4-х букв одну ошибку. :-)
> а за данный маневр на ресурсе по открытым технологиям - двукратный бонус к
> вашей наглости.Не надо компостировать мозги анонимными постами. Открытость - не самоцель, а инструмент, повышающий удобство использования софта.
Если вы не знаете, что такое неопределенное поведение - для начала надо хотя бы одну хорошую книгу по сям или плюсам прочесть. Потому что это понятие будет в ЛЮБОМ хоть сколько-нибудь приличном учебнике. И если вы его не знаете - значит либо учились по чему-то совсем печальному либо читали крайне невнимательно.
> И что за неопределённое поведение?Это когда ничего не делаешь, а оно делается и при это ошибки не возникает.
И при этом думаешь, почему оно что-то сделало, и ничего не произошло, ведь
я что-то не делал, а оно сделало, но не должно было так как я сделал, чтоб
ничего не делало. О_о
> Никто не знает, как работает UBSAN? И что за неопределённое поведение?если человек задаёт второй вопрос, то ответ на первый ему не нужен. ему хороший учебник нужен, и к написанию софта не подпускать минимум год.
К сожалению, не попало: "Кроме этого, в состав GCC 4.9 имеют шанс попасть библиотеки для поддержки JIT-компиляции средствами GCC".
И где же движение в сторону http://www.opennet.me/opennews/art.shtml?num=33396 ?
> К сожалению, не попалок счастью. надеюсь, эту фиготень тихонько закопают. если не уже.
>> Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap; Подскажите, что сейчас вместо mudflap?
-fsanitize=address
> Подскажите, что сейчас вместо mudflap?Valgrind.
Интересно, когда-нибудь из thread уберут макрос проверки версии языка/компилятора?
Используйте llvm'ский libc++ вместо убогого libstdc++
Желаю Вам успешно скомпилировать Linux клэнгом.
FreeBSD скомпилировали. Над Linux усиленно работают. Если чере пару минорных релизов - РАЗ! и соберут - что будешь делать?
Похлопаю, порадуюсь и продолжу использовать OpenMP с gcc.
Все соснули http://clang-omp.github.io/
Хлопаю, радуюсь... и прохожу мимо.
> РАЗ! и соберутДа у бздюков вечно какие-то PoC крутизны. А как до дела - уйма грабель на ровном месте. Зато лицееееееензия расово верная. Правда, поскольку я не собираюсь зажимать ни код системы, ни код компилера, ибо не имею мощностей для поддержания форка со всеми наворотами - вот пусть полтора жирных корпораса которым не лень ресурсы на проприетарные форки тратить, имхо этим и пользуются. Прикольно же когда как в PS4, соня игры гоняет во всю, а у бздюков дырка от бублика вместо драйверов для амдшных APU.
> - что будешь делать?
Что делал слон, когда пришел Наполеон? :)
А std::function всё так же память выделяет на каждый чих, млять, вместо того, чтобы внутренний буфер использовать. Опять из boost это тащить :(
> А std::function всё так же память выделяет на каждый чих, млять, вместо
> того, чтобы внутренний буфер использовать. Опять из boost это тащить :(Используйте llvm'ский libc++ вместо убогого libstdc++
> Используйте llvm'ский libc++ вместо убогого libstdc++у llvm появился libc++? откуда? зачем? O_O
>> Используйте llvm'ский libc++ вместо убогого libstdc++
> у llvm появился libc++? откуда?""libstd++ was moved to a port and libc++ was imported"" http://wiki.freebsd.org/GPLinBase
> зачем? O_O
Надо! http://www.freebsd.org/doc/en/articles/bsdl-gpl/article.html Фатальный недостаток: аппле от gplv3 пучит.
---Just removing it from base will meet opposition.
я спрашиваю, откуда оно в llvm и зачем оно там. в clang++ — это я бы ещё понял, но в llvm-то нафига?!
вау. сколько ВСЕГО полезного и Нужного !! =)
из оффтопа:
скоро Эскаватор и Пауэр8 ?
даже Броадвелл полноразмерный - вроде нескоро-ж ?