Linux Forum Казахстан

Общий => Новости => Тема начата: turbo от 21 Ноября 2008, 19:01

Название: GCC
Отправлено: turbo от 21 Ноября 2008, 19:01
[size="3"]Реализация оптимизации для GCC, учитывающей связь между файлами сборки[/size]

Разработчики компании Google представили начальную реализацию нового механизма оптимизации для набора компиляторов GCC - WHOPR (WHOle Program optimizeR). Традиционная реализация GCC оперирует только единичными файлами, компиляция которых производится независимо друг от друга, после чего производится связывание готовых объектных файлов в единый исполняемый файл. Данный подход имеет преимущество в том, что процесс сборки легко может быть распараллелен в несколько потоков, одновременно могут компилироваться несколько файлов. Но метод раздельной сборки имеет проблемы в плане оптимизации использования функций, которые, в случае определения в другом файле исходных текстов, не могут быть оптимизированы в зависимости от текущих условий их вызова.

Проект WHOPR реализует альтернативную схему LTO (Link-Time Optimization) оптимизации для GCC, не требующую в отличии от LTO больших объемов оперативной памяти для сборки, и пригодную для использования в больших проектах. WHOPR использует три фазы:

 1. При компиляции каждого файла, сохраняется промежуточное представление кода (GIMPLE). Связь между файлами на этом этапе не анализируется и сборка может происходить в несколько потоков, ничем не отличаясь от традиционной модели;
 2. После завершения сборки всех файлов, запускается процесс целостного анализа программы, который строит суммарные карты вызова функций, на основе сохраненных GIMPLE-дампов. Используя построенные карты, компилятор строит план проведения будущей оптимизации, определяя в каких местах имеет смысл проводить дополнительную оптимизацию.
 3. На основании подготовленных в предыдущих шагах данных, компилятор проводит логическую трансформацию (LTRANS), применяя ранее подготовленный для каждого файла план оптимизации. Логическая трансформация может производиться для каждого файла в параллельном режиме.
http://www.opennet.r...shtml?num=19027 (http://www.opennet.ru/opennews/art.shtml?num=19027)
Название: GCC
Отправлено: turbo от 12 Марта 2009, 20:25
[size="3"]В Gcc 4.4 появится поддержка автоматического распараллеливания циклов[/size]

В списке рассылки GCC опубликован план реализации автоматического распараллеливания циклов в GCC. Ранее в дерево исходных текстов GCC был интегрирован код проекта Graphite, в рамках которого была разработана технология оптимизации через обеспечение параллельного выполнения циклических операций. Разработка Graphite велась при участии компании IBM. Для обеспечения автоматического распараллеливания операций код Graphite будет комбинирован с генератором кода autopar, основанным на реализации спецификаций OpenMP, созданной в рамках проекта GOMP.

Начальная поддержка автоматического распараллеливания появится в следующем релизе - GCC 4.4. Разработка позволит значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек распараллеливания, например, Threading Building Blocks.

http://www.opennet.r...shtml?num=20697 (http://www.opennet.ru/opennews/art.shtml?num=20697)
Название: GCC
Отправлено: turbo от 22 Апреля 2009, 20:44
[size="3"]Релиз набора компиляторов GCC 4.4.0[/size]

Вышел набор компиляторов GCC 4.4.0 с измененным лицензионным соглашением на runtime - "GCC RUNTIME LIBRARY EXCEPTION", убирающим некоторые ограничения лицензии GPLv3 для Runtime компонент набора компиляторов, что позволяет генерировать в GCC любой код, независимо от лицензии под которой он будет распространяться (например, в качестве runtime теперь можно использовать код для обеспечения работы виртуальных машин, обрабатывающих байткод, в том числе Java).

Основные изменения по сравнению с веткой GCC 4.3.x:

 * Добавлен оптимизатор Graphite, основанный на полиэдральном промежуточном представлении - технологии оптимизации для обеспечения параллельного выполнения циклических операций. Оптимизация касается всех языков, поддерживаемых GCC. Разработка позволяет значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек распараллеливания, например, Threading Building Blocks.
 * Добавлены новый аллокатор регистров (IRA - integrated register allocator) и новый планировщик расстановки инструкций.
 * Новые опции оптимизации: "-findirect-inlining", "-ftree-switch-conversion", "-ftree-builtin-call-dce" и "-fconserve-stack";
 * Новые опции предупреждения о потенциальных ошибках в коде: "-Wparentheses", "-Wsequence-points", "-Wconversion", "-Wuninitialized" и т.д.
 * Реализована поддержка версии 3 спецификации OpenMP (API для параллельных вычислений);
 * Улучшена поддержка грядущего С++ стандарта C++0x, например, в libstdc++ добавлены заголовочные файлы chrono, condition_variable, cstdatomic, forward_list, initializer_list, mutex, ratio, system_error и thread;
 * Произошли множественные изменения в поддержке языков C/C++/Fortran;
 * Улучшена поддержка уже поддерживаемых архитектур: добавлены средства оптимизации для CPU ARM Cortex-A9, Cortex-R4 и Cortex-R4F, PowerPC e300c2, e300c3, e500mc, IBM System z10 EC/BC; добавлена поддержка встроенных функций Intel AES, Intel PCLMUL, Intel AVX; улучшена поддержка архитектур MIPS, AVR, IA-32/x86-64, IA-32/IA64, PowerPC и т.д.
 * GCC стал считать ошибками некоторые программисткие "решения", которые компилировались ранее. Например, теперь не работает "#elif" без аргумента; "cstdio" больше не подразумевает включение "string.h", "ios.h", "iomanip.h", "streambuf.h" и "locale.h", а "stdint.h" не включает "string.h" и "ios.h". ; строковые функции больше не принимают "char*" в контексте "const char*" (т.е. если str1 - "const char*", то "char* str2 = strchr(str1, 'a')" работать не будет); ужесточены требования к инициализации C++ классов.

Разработчики Fedora уже ранее заявили о том, что версия 11 дистрибутива будет полностью скомпилирована GCC 4.4.0. Однако, работа предстоит немалая: при попытке пересборки новым компилятором 6228 пакетов дистрибутива было зафиксировано 559 ошибок.

http://www.opennet.r...shtml?num=21376 (http://www.opennet.ru/opennews/art.shtml?num=21376)
Название: GCC
Отправлено: turbo от 01 Января 2010, 22:07
[size="3"]Анонсировано соревнование по созданию запутанного кода на языке Си[/size]

Организаторы мероприятия "Underhanded C Contest" объявили о начале приема заявок на участие в конкурсе по созданию небольших и легко читаемых программ на языке Си, которые с виду не вызывают подозрений, но выполняют скрытые и непредсказуемые действия. Чем труднее при проведении аудита кода распознать скрытую вставку, тем выше ставится оценка участнику. В качестве задания участникам предлагается создать процедуру для распределения багажа в аэропорту, которая по волшебному стечению обстоятельств направляет багаж не по тому маршруту, если клерк при заполнении бланка оформит определенным образом текст в поле комментария.

Организаторы подчеркивают, что в отличие от известного соревнования по созданию самого запутанного и трудночитаемого кода The International Obfuscated C Code Contest , на конкурсе "Underhanded C Contest" ставится противоположная задача - код должен быть предельно ясен и читаем, но за невинным внешним видом должен быть скрыт "троянский конь". Работы на конкурс будут приниматься до 1 марта. Приз символический - сертификат на 100 долларов для покупки в интернет-магазине ThinkGeek.com.

С работами победившими на конкурсе в прошлые годы можно познакомиться на данной странице. Например, в прошлом году участникам предлагалось создать программу, которая рисует на изображении формата PPM черный прямоугольник, но с возможностью полностью восстановить закрашенную область. В 2007 году предлагалось подготовить программу для шифрования, при определенных условиях оставляющую возможность расшифровки без знания пароля. В 2006 году создавалась функция для обработки строк, на определенной операционной системе замедляющая свою работу.

http://www.opennet.r...shtml?num=24869 (http://www.opennet.ru/opennews/art.shtml?num=24869)
Название: GCC
Отправлено: turbo от 24 Февраля 2010, 18:02
[size="3"]GCC-плагин DragonEgg достиг возможности собственной пересборки[/size]

Разработчики проекта LLVM сообщили о новом достижении - GCC-плагин DragonEgg достиг состояния, позволяющего пересобрать самого себя. DragonEgg представляет собой подключаемый к набору компиляторов GCC плагин, позволяющий в максимально прозрачном режиме использовать в стандартном GCC оптимизаторы и генераторы кода, разработанные в рамках LLVM. LLVM компилирует программы в промежуточный платформонезависимый байткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации), который затем может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Одним из самых надежных тестов работоспособности компиляторов является пересборка собственной кодовой базы. DragonEgg на днях успешно перешагнул этот барьер: вначале с использованием DragonEgg были пересобраны исходные тексты GCC-4.5, LLVM и dragonegg, а затем эксперимент по был повторен с задействованием для пересборки свежескомпилированного бинарного файла. В настоящий момент до достаточно высокого уровня доведена работоспособность DragonEgg для языков Си и Си++, частично реализована поддержка Fortran и Ada, хуже обстоят дела с поддержкой Obj-C и Obj-C++, много работы предстоит проделать для поддержки Java. На текущей стадии развития DragonEgg поддерживает архитектуры x86-32 и x86-64, может работать в Linux и Darwin.

Несколько недель назад стадии возможности самопересборки достиг Clang, LLVM фронтенд для языков C, С++ и Objective-C.

Кроме CLang, из основанных на LLVM проектов, можно отметить:

 * VMKit - виртуальная машина для Java VM и .NET VM;
 * Реализация функционального языка программирования Pure;
 * LDC - компилятор для языка D;
 * Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
 * Rubinius и MacRuby - виртуальные машины для Ruby;
 * Unladen Swallow - реализация языка Python;
 * LLVM-Lua;
 * FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.

http://www.opennet.r...shtml?num=25551 (http://www.opennet.ru/opennews/art.shtml?num=25551)
Название: GCC
Отправлено: Zhek@Ch от 27 Марта 2011, 16:35
[size="3"]Релиз набора компиляторов GCC 4.6.0 [/size]

После почти года разработки вышел (http://gcc.gnu.org/gcc-4.6/) набор компиляторов GCC 4.6.0 (http://gcc.gnu.org/), в котором добавлена поддержка языка программирования (http://www.opennet.ru/opennews/art.shtml?num=24209) Go (http://golang.org/), созданного инженерами Google, а также добавлен новый уровень оптимизации "-Ofast", улучшена поддержка генерации кода для процессоров Intel Core 2 и выше.

Основные изменения (http://gcc.gnu.org/gcc-4.6/changes.html):

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30035)
Название: GCC
Отправлено: Zhek@Ch от 14 Июня 2011, 00:25
[size="3"]Компания PathScale открыла код GCC-совместимого набора компиляторов EKOPath 4[/size]

Компания PathScale анонсировала (http://www.pathscale.com/ekopath4-open-source-announcement) открытие исходных текстов высокопроизводительного набора компиляторов EKOPath 4 (http://www.pathscale.com/ekopath-compiler-suite), совместимого с GCC и удовлетворяющего требованиям стандарта ISO C99/C++ 2003. Кроме компиляторов С и С++, в комплект также входят: компилятор для языка Fortran 90/95/2003, совместимый с GDB отладчик PathDB, ассемблер PathAS, набор run-time-компонентов и стандартные библиотеки. Компилятор уже достаточно давно используется в промышленных системах, отвечает индустриальным требованиям к стабильности и надежности, поддерживает большое число дополнительных оптимизаций для платформ Intel 64 и AMD64, включает поддержку технологий Intel MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AMD SSE4A и AVX.

Код проекта открыт под лицензией GPLv3 и частично доступен (https://github.com/path64/) в GitHub (полная версия будет размещена (http://twitter.com/#%21/CTOPathScale/status/80299215636541441) в ближайшие часы, после завершения обновления официального сайта проекта). Бинарные сборки подготовлены для Linux (http://c591116.r16.cf2.rackcdn.com/ekopath/nightly/Linux/ekopath-2011-06-12-installer.run), FreeBSD и Solaris. Код отладчика PathDB открыт под более либеральной BSD-подобной лицензией. До открытия кода, стоимость лицензии на EKOPath 4 начиналась от 1795 долларов, после открытия кода компания PathScale намерена зарабатывать средства за счет оказания услуг технической поддержки и заключения сервисных контрактов. По мнению PathScale выгода от открытия кода будет связана прежде всего с увеличением числа пользователей и областей применения EKOPath, а также с привлечением сторонних энтузиастов и компанией к совместной работе над развитием проекта.

С точки зрения производительности, EKOPath 4 во многих ситуациях заметно опережает GCC, например, в тесте Himeno EKOPath обгоняет GCC почти в три раза, в тесте C-Ray быстрее (http://www.phoronix.com/scan.php?page=article&item=pathscale_ekopath4_open&num=3) на 40%, в тесте NASA NPB на 8%, в тесте TSCP на 80%. Подобные результаты не удивительны - пакет EKOPath 4 специально создавался для использования в промышленных системах, требующих повышенной производительности (например, EKOPath используется в NASA, военных подразделениях и лабораториях Министерства энергетики США). В EKOPath 4 обеспечена поддержка открытого стандарта OpenMP 2.5 (http://ru.wikipedia.org/wiki/OpenMP), компилятор позволяет автоматически распараллеливать выполнение программ на многоядерных процессорах.

С позиции совместимости, EKOPath 4 не испытывает проблем со сборкой ОС NetBSD и FreeBSD, а также таких крупных проектов, как инструментарий GNU, Qt и KDE. Удалось обеспечить сборку Linux-ядра, но пока это возможно только после применения небольшого патча. В настоящее время компания PathScale работает в направлении обеспечения полной совместимости с доступными научными библиотеками и размещенным в публичных репозиториях открытым ПО.

Отладчик PathDB имеет режим совместимости с GDB и поддерживает спецификацию DWARF4 (http://dwarfstd.org/), определяющую формат прикрепления к приложениям отладочной информации. Последняя версия PathDB была улучшена в направлении упрощения отладки многопоточных приложений и библиотек, продолжена работа в области повышения надежности и производительности, улучшена интеграция поддержки языков C++ и Fortran, расширены средства для отладки в кластерных окружениях.

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30858)
Название: GCC
Отправлено: Zhek@Ch от 28 Июня 2011, 07:24
[size="3"]Корректирующие релизы наборов компиляторов GCC 4.6.1 и GCC 4.3.6[/size]

Вышел (http://gcc.gnu.org/gcc-4.6/) корректирующий релиз набора компиляторов GCC 4.6.1, в котором проведена работа по исправлению ошибок, регрессивных изменений и проблем с совместимостью. С момента выхода прошлой версии отмечено (http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1) 157 исправлений, большинство из которых связано с устранением внесенных ранее регрессивных изменений и с улучшением поддержки спецификаций C++0x. Исходные тексты компилятора можно загрузить с сайта проекта (ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.1/) или с его зеркал (http://gcc.gnu.org/mirrors.html). Следующее обновление GCC 4.6.2 ожидается (http://gcc.gnu.org/ml/gcc/2011-06/msg00341.html) в конце сентября или начале октября.

Дополнение: одновременно вышел (http://gcc.gnu.org/ml/gcc/2011-06/msg00340.html) корректирующий релиз GCC 4.3.6 (http://gcc.gnu.org/gcc-4.3/), в котором устранено 28 ошибок (http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6). Это последнее обновление GCC 4.3, ветка объявлена закрытой.

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=31013)
Название: GCC
Отправлено: Zhek@Ch от 12 Июля 2011, 00:18
[size="3"]Опубликован стандарт OpenMP 3.1, определяющий API для параллельного программирования [/size]
 
Анонсировано (http://openmp.org/wp/2011/07/openmp-31-specification-released/) принятие финального варианта открытой спецификации OpenMP 3.1 (http://openmp.org/wp/openmp-specifications/), выступающей в роли стандарта, определяющего API и способы задействования методов параллельного программирования для языков Си, Си++ и Фортран. Прошлый вариант спецификации OpenMP 3.0 был выпущен три года назад.

 Выпуск OpenMP 3.1 в основном носит корректирующих характер и устраняет всплывшие за последние годы недоработки. Тем не менее в обновленном вариант спецификации представлено несколько полезных новшеств, добавленных в угоду пожеланий представителей сообщества. Например, в спецификацию включена реализация предопределенных операторов редукции min и max, а также добавлены расширения для атомарных конструкций (блок atomic), позволяющих захватить или вывести значение совместно используемой переменной, которая обновляется внутри конструкции, без её предварительного чтения. Из других расширений отмечается возможность привязки потока к процессору и поддержка оптимизации приложений, использующих модель выполнения задач OpenMP.

 Что касается будущего стандарта OpenMP 4.0, наиболее привлекательными новшествами в нем станет поддержка ускорения за счет привлечения мощностей GPU, значительные улучшения в модели выполнения задач, добавление механизмов обработки ошибок и поддержка определенных пользователем редукций.

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=31153)
Название: GCC
Отправлено: Zhek@Ch от 14 Июля 2011, 00:33
[size="3"]Наглядное представление шагов оптимизации в GCC [/size]

Дэвид Малколм (David Malcolm), автор Python-плагина для GCC (gcc-python-plugin (http://readthedocs.org/docs/gcc-python-plugin/en/latest/)), подготовил наглядную диаграмму (http://readthedocs.org/docs/gcc-python-plugin/en/latest/tables-of-passes.html), оформленную в стиле карты метро, с отображением выполняемых в GCC шагов оптимизации, используемых в процессе преобразования исходного кода в машинные инструкции, минуя несколько различных внутренних представлений. Карта сформирована в SVG-формате, поэтому для просмотра требуется поддерживающий данный формат браузер, например, Firefox, Opera или Chrome.

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=31168)
Название: GCC
Отправлено: Zhek@Ch от 19 Августа 2011, 08:03
[size="3"]Спецификация C++0X принята в качестве международного стандарта C++11 [/size]

Завершилась длительная эпопея по принятию нового стандарта для языка программирования Си++. Комитет ISO по стандартизации языка C++ единогласно утвердил (http://herbsutter.com/2011/08/12/we-have-an-international-standard-c0x-is-unanimously-approved/) спецификацию C++0X (http://www2.research.att.com/%7Ebs/C%2B%2B0xFAQ.html) в качестве международного стандарта "C++11". Стандарт C++0X планировалось выпустить еще в 2008 году, но его принятие постоянно откладывалось. Большинство представленных в стандарте возможностей уже поддерживаются (http://wiki.apache.org/stdcxx/C++0xCompilerSupport) в таких компиляторах, как GCC (http://gcc.gnu.org/projects/cxx0x.html), IBM C++ (http://www2.research.att.com/%7Ebs/C%2B%2B0xFAQ.html), Intel C++ (http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/), Visual C++ (http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx), C++ Builder. Поддерживающие C++11 стандартные библиотеки (http://www2.research.att.com/%7Ebs/C%2B%2B0xFAQ.html#library) реализованы в рамках проекта Boost (http://www.boost.org/).

Новый стандарт развивался более 10 лет и пришел на смену стандартам C++98 и C++03. Отмечается, что если различия между стандартами C++98 и C++03 были столь незначительными, что их можно было не заметить, то стандарт C++11 содержит ряд кардинальных улучшений, как самого языка, так и стандартной библиотеки. По словам Бьерна Страуструпа, создателя C++, C++11 ощущается как новый язык, части которого лучше сочетаются друг с другом. В C++11 высокоуровневый стиль программирования стал более естественным, а эффективность возросла как никогда раньше. Кроме того, язык стал проще для изучения и освоения новичками.

Основные улучшения (http://ru.wikipedia.org/wiki/C%2B%2B0x), отраженные в стандарте C++11:

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=31476)
 
Название: GCC
Отправлено: Zhek@Ch от 27 Октября 2011, 17:02
[size="3"]Корректирующий релиз набора компиляторов GCC 4.6.2 [/size]

Доступен (http://gcc.gnu.org/gcc-4.6/) корректирующий релиз набора компиляторов GCC 4.6.2, в котором проведена работа по исправлению ошибок, регрессивных изменений и проблем с совместимостью. С момента выхода прошлой версии отмечено 115 исправлений (http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2), большинство из которых связано с устранением внесенных ранее регрессивных изменений и с улучшением поддержки спецификаций C++0x. Исходные тексты компилятора можно загрузить с сайта проекта (ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.2/) или с его зеркал (http://gcc.gnu.org/mirrors.html). Следующее обновление GCC 4.6.3 ожидается в феврале.

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=32138)
Название: GCC
Отправлено: Zhek@Ch от 14 Ноября 2011, 17:49
[size="3"]Возобновлено соревнование по написанию самого запутанного кода на языке Си [/size]

После пятилетнего перерыва, анонсировано (http://www.ioccc.org/2011/rules.txt) возрождение конкурса IOCCC (http://www.ioccc.org/) (International Obfuscated C Code Contest), участникам которого предлагается написать на языке Си наиболее запутанный и трудноразбираемый код, на основании анализа которого проблематично разобраться в сути решаемой задачи. При этом код должен быть интересен и чем-то примечателен, подчеркивая важность правильного стилевого оформления или выделяя неожиданные стороны языка Си. Размер программы не должен превышать 4096 байт, программа должна собираться и выполнять какое-либо осмысленное действие.

Работы на конкурс будут приниматься (http://www.ioccc.org/2011/guidelines.txt) до 12 января 2012 года. Каталог работ прошлых победителей можно найти на данной странице (http://www.ioccc.org/winners.html).

# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=32294)