Увидел свет набор компиляторов LLVM 3.7

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

Улучшения в Clang 3.7:

  • Обеспечена полная поддержка стандарта OpenMP 3.1 (Open Multi-Processing), предоставляющего средства для применения методов параллельного программирования в программах на языках Си и Си++. Доступны средства обеспечения параллелизма на уровне задач (распараллеливание функций и циклов) и параллелизма на уровне данных (векторизация, распараллеливание типовых операций над массивами данных). В том числе реализованы комбинированные директивы, такие как "#pragma omp parallel for" и "#pragma omp parallel sections", атомарные операции ("#pragma omp atomic") и средства векторизации последовательных и параллелизированных циклов на процессорах с поддержкой инструкций SIMD ("#pragma omp simd").

Реализация OpenMP в Clang базируется на открытой компанией Intel runtime-библиотеке OpenMP, которая связывается с итоговыми OpenMP-приложениями и выполняет диспетчеризацию потоков в процессе выполнения OpenMP-программы. Из особенностей библиотеки отмечается поддержка различных аппаратных архитектур (x86, x86_64, PowerPC, ARM), высокая производительность и совместимость на уровне ABI с GCC и проприетарными OpenMP-компиляторами Intel. Для сборки программы с задействованием OpenMP достаточно указать при компиляции опцию "-fopenmp", а также пути к заголовочному файлу ("-I путь к omp.h") и библиотеке ("-L путь к библиотеке openmp").

  • Интегрирован механизм проверки целостности выполнения программы CFI (Control Flow Integrity), нацеленный на выявление некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального потока управления (control flow) в результате атаки на приложение. Представленный метод защиты оптимизирован для минимизации накладных расходов, что позволяет использовать его при сборке релизов. Например, при сборке Chromium с включением CFI наблюдалось замедление менее, чем на 1%, но увеличение размера исполняемого файла на 15%. Для включения следует использовать флаг "-fsanitize=cfi" в сочетании с включением оптимизации на этапе связывания ("-flto");
  • При использовании языковых расширений для определения атрибутов (__declspec) теперь требуется указывать флаг "-fms-extensions" или "-fborland". Расширения также доступны при сборке кода CUDA;
  • При сборке для Windows обеспечена поддержка некоторых видов нестандартного использования языковых конструкций __try, __except и __finally. MSVC-совместимые расширения C++ пока не поддерживаются. Также отмечается, что Clang 3.7 является последним выпуском с поддержкой Windows XP и Windows Vista, в Clang 3.8 требования к версии будут повышены до Windows 7;
  • Средства диагностики расширены для отлавливания дополнительных проблем и вывода более точной информации о характере проблемы. Среди новых предупреждений отмечаются: -Wrange-loop-analysis, -Wredundant-move, Wpessimizing-move, -Wmove, -Winfinite-recursion и -Wobjc-circular-container;
  • Добавлен новый флаг компиляции "-fsized-deallocation", отвечающий за включение поддержки функции delete с указанием размера (sized deallocation), определённой в спецификации C++14;
  • Поддержка совместимых с GCC флагов для управления оптимизацией на основе профиля выполнения (PGO, profile guided optimization): "-fprofile-generate=dir", "-fprofile-use=dir", "-fno-profile-generate" и "-fno-profile-use";

    Основные новшества LLVM 3.7:

    • Новый C++ JIT API для компиляции по запросу (ORC, On Request Compilation), отталкивающийся в функциональности от MCJIT, но созданный для упрощения интеграции новых возможностей и улучшения тестируемости кодовой базы. Из интересных новшеств отмечаются средства отложенной компиляции функций (function-at-a-time) на системах x86. В состав также входит новая реализация MCJIT API, в том числе режим для симуляции поведения MCJIT (OrcMCJITReplacement). MCJIT оставлен в кодовой базе и продолжает использоваться в качесестве движка JIT (ExecutionEngine) по умолчанию;
    • Новый бэкенд для компиляции сценариев в байткод BPF (Berkeley Packet Filter), поддерживающий набор расширенных инструкций, представленных в доступной в свежих ядрах Linux виртуальной машине eBPF. Собранные BPF-сценарии могут быть загружены в ядро Linux при помощи системного вызова bpf(2) и использованы для создания похожих на модули ядра обработчиков и фильтров. Из отличий расширенного BPF отмечается добавление восьми дополнительных регистров, реализация новых инструкций (call, shift, map hash/array, операции чтения и сохранения в стеке от 1 до 8 байт), добавление 64-разрядных регистров и возможность обращения к ограниченным функциям ядра. Для задействования бэкенда для генерации байткода BPF следует использовать опцию "-target bpf" в Clang или "-march=bpf" в llc;
    • Для написания модулей для виртуальной машины eBPF представлен фреймворк BCC (BPF Compiler Collection), предоставляющий средства по написанию сценариев на языке Си, которые затем транслируются в корректные программы BPF. В том числе в BCC предоставляются привязки к подсистемам ядра Linux, позволяющие создавать фильтры для сокетов, классификаторы трафика и обработчики определённой сетевой активности. Для языка Python подготовлен набор биндингов. Кроме того, можно отметить инициированный организацией Linux Foundation проект IO Visor, нацеленный на создание инструментов и инфраструктуры для разработки расширяющих ядро Linux сетевых возможностей и обработчиков ввода/вывода, реализованных в форме модулей BPF.
    • Значительно расширены возможности бэкендов для архитектур MIPS, PowerPC и SystemZ.

    Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:

    • KLEE - символьный анализатор и генератор тестовых наборов;
    • Runtime-библиотека compiler-rt;
    • llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ.
    • Реализация функционального языка программирования Pure;
    • LDC - компилятор для языка D;
    • Виртуальные машины для Ruby: Rubinius и MacRuby;
    • LLVM-Lua
    • FlashCCompiler - средство для компиляции кода на языке Си в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
    • LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; показывает крайне высокое быстродействие при отладке программ большого размера;
    • emscripten - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
    • sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux.
    • Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
    • CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
    • Julia - открытый динамический язык программирования, использующий наработки проекта LLVM.
    • Jade (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC);
    • PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры;
    • PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
    • Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
    • LibBeauty - инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll);
    • McSema - фреймворк для преобразования машинного кода в биткод LLVM;
    • Swift - основанный на LLVM язык программирования, развиваемый компанией Apple;
    • FTL (Fourth Tier LLVM) - JIT-компилятор для движка WebKit;
    • Polly - экспериментальный оптимизатор, поддерживающий несколько техник оптимизации циклов и позволяющий организовать автоматическое распараллеливание кода с задействованием OpenMP.



    1. Главная ссылка к новости (http://lists.llvm.org/pipermai...)
    2. OpenNews: В LLVM/Clang добавлена техника защиты стека SafeStack
    3. OpenNews: Новая версия набора компиляторов LLVM 3.6
    4. OpenNews: В кодовую базу LLVM приняты биндинги для языка Go
    5. OpenNews: Apple, возможно, сокращает своё участие в разработке LLVM
    6. OpenNews: В Clang обеспечена полноценная поддержка OpenMP
    Тип: ПрограммыКлючевые слова:llvm, clang, (найти похожие документы)При перепечатке указание ссылки на opennet.ru обязательно
    Обсуждение Линейный вид (Ajax) | Показать все | RSS
     
    +1 +/
    Фороникс что-то давненько не выдавал нагора сравнения последних компиляторов.
    Пускай выкладывают, кто-нибудь скажите форониксу об этом плиз.:)
     Увидел свет набор компиляторов LLVM 3.7 -1
     
     
    +2 +/
    Сам же сразу и ответил: Зашёл на фороникс, а там на тебе: http://www.phoronix.com/scan.php?page=article&item=clang-37-gcc52&num=1  Увидел свет набор компиляторов LLVM 3.7 -2
     
     
    +/
    > Сам же сразу и ответил: Зашёл на фороникс, а там на тебе:
    > http://www.phoronix.com/scan.php?page=article&item=clang-37-gcc52&num=1

    В итоге, слушайте ну Clang очень успешно и динамично за столь короткий путь развития догнал (а в большинстве этих пусть и синтетических, но тестов даже перегнал) gcc.

    Слава разработчикам! Clang'у слава!

     Увидел свет набор компиляторов LLVM 3.7 -3
     
     
    +3 +/
    последнее это сарказм?  Увидел свет набор компиляторов LLVM 3.7 -4
     
    –5 +/
    В итоге всё равно все используют GCC ... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -5
     
     
    –5 +/
    Что такое GCC Google Closure Compiler ... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -6
     
     
    +/
    https://gcc.gnu.org/  Увидел свет набор компиляторов LLVM 3.7 -7
     
     
    +2 +/
    это который в тихую линкует статически либу под GPL v3 что вызывает автоматом см... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -8
     
     
    +/
    Дурачек не нужно тут бредить ... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -9
     
    +/
    И Зато гордые птицы-ежики из-за этого пинка со стороны llvmовцев, как минимум... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -10
     
    +/
    кто все в os x, freebsd clang, да и в windows от тоже есть А если вы про линук... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -11
     
    –2 +/
    Скорость развития -- очень хорошая, и разработчики молодцы Но всё же давайте по... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -12
     
     
    +2 +/
    По той же причине, по которой не используют -Ofast В GCC включаемые с -O3 оптим... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -13
     
    –7 +/
    Судя по картинкам по ссылке, недалек уже тот момент, когда gcc натурально можно ... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -14
     
     
    –1 +/
    иди учись школьник! gcc в любом случае не умрет, а модульную конструкцию из llvm действительно не грех перенять и переймут, не сумлевайся!  Увидел свет набор компиляторов LLVM 3.7 -15
     
     
    –3 +/
    Аха, ну ситуация сродни Freeswitch против Астериска Первый модульный и перспект... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -16
     
    –1 +/
    Када я вырасту я стану самый-самый. Воть.  Увидел свет набор компиляторов LLVM 3.7 -17
     
    +1 +/
    Rust забыли в список проектов включить.  Увидел свет набор компиляторов LLVM 3.7 -18
     
     
    –2 +/
    от горе...  Увидел свет набор компиляторов LLVM 3.7 -19
     
    +1 +/
    Roadsend PHP? С 2012 никаких коммитов  Увидел свет набор компиляторов LLVM 3.7 -20
     
     
    –6 +/
    Что в этом clang хорошего Вчера вышел C Builder новый, поставляющийся с этим ... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -21
     
     
    +3 +/
    > Что в этом clang хорошего? Вчера вышел C++ Builder новый, поставляющийся с
    > этим компилятором по умолчанию, программы теперь медленней станут и толще? :)
    > А плюсы есть какие-нибудь?

    Как минимум два. Они прямо в названии и стоят "C++ Builder". :)

     Увидел свет набор компиляторов LLVM 3.7 -22
     
    +2 +/
    * Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
    ...
    * PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;

    Вообще-то это один и тот же проект, он сменил своё название с первого на второе. Можно убедиться в этом здесь: https://github.com/pocl/pocl

     Увидел свет набор компиляторов LLVM 3.7 -23
     
     
    –1 +/
    Сейчас прибежит Столлман со своим gcc и будет хвалить LLVM... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -24
     
     
    +1 +/
    А чего среди проектов на базе LLVM RUST не указан один из самых интересных про... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -25
     
     
    +/
    А этот недавний патч для увеличения производительности radeon интегрирован?  Увидел свет набор компиляторов LLVM 3.7 -26
     
     
    +/
    Apple с LLVM потихоньку наматывает яйца столмана на винт... весь текст скрыт [показать]
     Увидел свет набор компиляторов LLVM 3.7 -27
     
     

    Ваш комментарий

     

 

Добавить комментарий


Защитный код
Обновить