The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Новая версия набора компиляторов LLVM 3.8"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от opennews (ok) on 09-Мрт-16, 10:37 
Состоялся (http://lists.llvm.org/pipermail/llvm-announce/2016-March/000...) релиз проекта LLVM 3.8 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы. В новом выпуске включена по умолчанию поддержка OpenMP 3.1, добавлены элементы OpenMP 4.x, реализована возможность компиляциии CUDA, задействован режим shrink-wrapping, добавлены новые возможности OpenCL 2.0, добавлен режим emutls, улучшен  статический анализатор, проведена ревизия  C API, объявлена устаревшей система сборки autoconf.

Улучшения (http://llvm.org/releases/3.8.0/tools/clang/docs/ReleaseNotes...) в Clang 3.8:


-   Значительно улучен генератор кода для конструкций OpenMP, который теперь генерирует более стабильный и быстрый код. Включена по умолчанию поддержка стандарта OpenMP 3.1 (Open Multi-Processing), предоставляющего средства для применения методов параллельного программирования в программах на языках Си и Си++.  GCC Вместо библиотеки GCC OpenMP в Clang используется открытая компания Intel runtime-библиотека OpenMP (http://openmp.llvm.org/), которая при указании флага "-fopenmp" связывается с итоговыми OpenMP-приложениями и выполняет диспетчеризацию потоков в процессе выполнения OpenMP-программы.

Кроме полной поддержки OpenMP 3.1 в новом выпуске также реализована порция возможностей, доступных в OpenMP 4.0 (https://www.opennet.ru/opennews/art.shtml?num=37635)/4.5 (https://www.opennet.ru/opennews/art.shtml?num=43412): конструкции map, num_teams, simdlen, hint  и thread_limit, директивы "target",  "target data", "target enter data" и "target exit data", определение зависимостей между задачами, секции массивов, модификаторы имён для выражений "if", возможность использования выражения linear в директивах управления циклами;


-  Экспериментальная поддержка компиляциии CUDA. Драйвер определяет наличие установок CUDA, создаёт сценарии компиляции компонентов для хоста и устройства (GPU), связывает выполняемый на стороне устройства код  с соответствующим биткодом и герерирует единый объектный файл с кодом для выполнения на стороне хоста и GPU. Поддерживается перезагрузка функций на основе атрибутов, которая позволяет компилировать код CUDA без его разделения на отдельные части для хоста и GPU;

-  Режим диагностики "-Wmicrosoft" разбит на серию отдельных флагов, что позволяет выборочно включать определённые подкатегории предупреждений. Флаг "-Wno-microsoft" по-прежнему отключает, а "-Wmicrosoft" включает сразу  все предупреждения, специфичные для расширений MSVC;

-  Возможность настройки включения отладочной информации DWARF с учётом особенностей различных отладчиков. В частности, можно не включать в файл отладочные данные, которые не поддерживаются или не используются определённым отладчиком, или добавлять специфичные для какого-то отладчика расширения. Предусмотрены три флага: "-ggdb" - адаптация  для GDB (после опции можно указать отладочный уровень, например, "-ggdb1"), "-glldb" - адаптация для LLDB, "-gsce" - адаптация для Sony Computer Entertainment debugger;
-  Добавлена  опция "-fstrict-vtable-pointers", включающая экспериментальный режим улучшенной девиртуализации;

-  Улучшены средства передачи в LLVM дополнительной информации о выравнивании указателей для строгих типов, задаваемой в коде через специальные атрибуты. Разыменование некорректно выравненных указателей относится к области неопределённого поведения, так как может привести к крахам или к понижению производительности на архитектурах требующих обязательного выравнивания указателей;

-  Для языка Си улучшена поддержка проверки "__builtin_object_size" и возможность применения специфичных для Си преобразований типов для функций, помеченных атрибутом "overloadable";

-  Расширена поддержка диалекта языка Си, используемого в OpenCL. Добавлены новые возможности OpenCL 2.0 (https://www.opennet.ru/opennews/art.shtml?num=38476): опция "-std=CL2.0", поддержка разделяемой виртуальной памяти (__generic), предварительная поддержка pipes (доступ к памяти по принципу FIFO), атомарные типы (atomic_int, atomic_uint, atomic_long и т.п.), типы для изображений ( image2d_depth_t, image2d_msaa_t и т.п.). В общем виде для OpenCL  улучшена поддержка векторов, расширены средства диагностики, добавлен оператор "^^", реализована порция новых флагов: -cl-no-signed-zeros, -cl-unsafe-math-optimizations, -cl-finite-math-only, -cl-fast-relaxed-math;

-  Улучшены средства статического анализа. В базовый состав включены утилиты scan-build и scan-view tools, предназначенные для запуска статического анализа проекта и просмотра результатов проверки. Значительно расширены средства статического анализа лямбда-функций  C++, в том числе добавлен межпроцедурный анализ лямбда-приложений. Добавлены новые проверки: некорректное использование vfork() и  типа _Nonnull, выявление ошибок локализации в Cocoa-приложениях  и т.д.


Основные новшества (http://llvm.org/releases/3.8.0/docs/ReleaseNotes.html) LLVM 3.8:


-  Переведена в разряд устаревших система сборки на базе инструментария autoconf. Поддержка autoconf будет удалена в выпуске LLVM 3.9. В качестве основной системы сборки  используется (http://llvm.org/releases/3.8.0/docs/CMake.html) CMake;

-  Прекращена поддержка Windows Vista и XP. Для работы LLVM на платформе Windows требуется Windows 7 и старше;


-  Добавлена поддержка совместимого с GCC  и независящего от особенностей целевых платформ режима хранения локальных переменных emutls (TLS - Thread-Local Storage (https://en.wikipedia.org/wiki/Thread-local_storage)). При указании флага "-femultated-tls" все обращения к TLS-переменным транслируются в вызов __emutls_get_address, предоставляемый runtime-библиотекой;

-  Компоновщик IR Linker разделён на две части: IRMover (перемещает биткод изодного модуля в другой ) и  Linker (принимает решение о связывании);
-  Добавлена опциональная возможность связывания clang и утилит LLVM с одной разделяемой библиотекой  libLLVM (для включения следует установить флаг "-DLLVM_LINK_LLVM_DYLIB=ON"  в CMake);

-  Внесены многочисленные улучшения в бэкенды для архитектур ARM, AArch64, MIPS и PowerPC;

-  Для архитектуры x86  повышена эффективность кода сравнения больших целочисленных значений (64-разрядных чисел на 32-разрядых системах);

The optimization to move the prologue and epilogue of functions in colder code path (shrink-wrapping) is now enabled by default.


More efficient code for wide integer compares. (E.g. 64-bit compares on 32-bit targets.)

-  Прекращена генерация секций .data.rel.ro.local и .data.rel;

-  Документированы (http://llvm.org/releases/3.8.0/docs/DeveloperPolicy.html#c-a...) принципы обеспечения стабильности C API для релизов и экспериментальных веток, а также правила расширения C API;

-  В разряд устаревших переведены функции C API: LLVMLinkModules (следует использовать LLVMLinkModules2), LLVMParseBitcode, LLVMParseBitcodeInContext, LLVMGetBitcodeModuleInContext,  LLVMGetBitcodeModule, LLVMGetBitcodeModuleProviderInContext, LLVMGetBitcodeModuleProvider, LLVMCreateExecutionEngine, LLVMCreateInterpreter, LLVMCreateJITCompiler, LLVMAddModuleProvider и LLVMRemoveModuleProvider;

-  Проведена реорганизация заголовочных файлов C API: связанные с типами определения перенесены в Type.h, а обработка ошибок в ErrorHandling.h;


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


-  KLEE (http://klee.llvm.org/) - символьный анализатор и генератор тестовых наборов;

-  Runtime-библиотека compiler-rt (http://compiler-rt.llvm.org/);

-  llvm-mc (http://llvm.org/releases/2.6/docs/ReleaseNotes.htm...

URL: http://lists.llvm.org/pipermail/llvm-announce/2016-March/000...
Новость: https://www.opennet.ru/opennews/art.shtml?num=44009

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от iZEN (ok) on 09-Мрт-16, 10:37 
Можно использовать совместно с Mesa/DRI 11.0.8?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 10:49 
> Можно использовать совместно с Mesa/DRI 11.0.8?

На софтваре-растерайзер потянуло? Невидиа жмёт?! Пользуйся, чего уж, разрешаю.

The Gallium llvmpipe driver is a software rasterizer that uses LLVM to do runtime [...]
[...]
* LLVM: version 3.4 recommended; 3.3 or later required.

http://www.mesa3d.org/llvmpipe.html

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

6. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от iZEN (ok) on 09-Мрт-16, 11:09 
То есть - нельзя.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Новая версия набора компиляторов LLVM 3.8"  +2 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 12:30 
*>>Пользуйся, чего уж, разрешаю.
*>> * LLVM: version 3.4 recommended; 3.3 or later required.

> То есть - нельзя.

Эппле не такой добрый, как я? Или коре тиим жмётся?  Кто обидел нашего рубаху-парня?!

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

10. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от Аноним (??) on 09-Мрт-16, 14:25 
Ну почему же сразу софтваре-растерайзер? Как же gallium3d и AMDGPU-бэкенд?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

12. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 15:27 
> Ну почему же сразу софтваре-растерайзер? Как же gallium3d и AMDGPU-бэкенд?

У него невидия. Исколючительно  и только. Но он почему-то не спросил, можно ли ему с блобом невидии "использовать" llvm. Видимо знал, куда идти -- сразу.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

31. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Аноним (??) on 10-Мрт-16, 16:13 
Насколько помню у него где-то встроенный в материнку r600.
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

34. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от iZEN (ok) on 11-Мрт-16, 21:56 
> glxgears

Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
300 frames in 5.0 seconds = 59.883 FPS
300 frames in 5.0 seconds = 59.964 FPS
300 frames in 5.0 seconds = 59.964 FPS
299 frames in 5.0 seconds = 59.760 FPS
300 frames in 5.0 seconds = 59.966 FPS

- на AMD 785G (RS880, Radeon HD 4200)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

3. "Новая версия набора компиляторов LLVM 3.8"  –5 +/
Сообщение от Аноним (??) on 09-Мрт-16, 10:40 
Надо будет проверить мой проект. А то в 3.7 силэнг крашился.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Новая версия набора компиляторов LLVM 3.8"  +2 +/
Сообщение от pavlinux (ok) on 09-Мрт-16, 14:25 
Виноват компилятор, ога. :D
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

15. "Новая версия набора компиляторов LLVM 3.8"  –4 +/
Сообщение от Аноним (??) on 09-Мрт-16, 17:22 
Именно крашиться он всё равно не должен.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

35. "Новая версия набора компиляторов LLVM 3.8"  +5 +/
Сообщение от pavlinux (ok) on 12-Мрт-16, 03:20 
> Именно крашиться он всё равно не должен.

Срочно в Microsoft резюме отправляй. В конце допиши "Мои проекты все без багов и всегда работают"  

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

25. "Новая версия набора компиляторов LLVM 3.8"  –4 +/
Сообщение от Аноним (??) on 09-Мрт-16, 22:03 
Ога. Вываливается с бектрейсом и просит отправить сырцы на багтрекер.
А то что гцц и мсвц все собирают я даже и не говорю.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

41. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Владимир (??) on 13-Мрт-16, 09:21 
Похоже, местные аналитики опеннета считают, что краш программы при обработке пользовательских данных - вполне себе нормальное поведение.
Да будь там хоть гигабайтный исходный файл на входе или 14000 вложенных циклов - пусть ошибку выдает, раз не может справиться.
Еще и заминусовали человека. Бред.
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

40. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от 0xd34df00d (??) on 12-Мрт-16, 16:26 
Нет, виноват проект сложнее хелловорлда.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

9. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Аноним (??) on 09-Мрт-16, 13:56 
Никто не знает, появилась ли возможность указывать линкеру скрипт с расположением секций и участков памяти, как в gcc? Без этого собирать под embedded довольно проблематично, приходится отдельно линковать gcc-шным ld, а это уныло. :(
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от Штунц on 09-Мрт-16, 16:15 
объясните, зачем этот режим интерпретатора "псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы"
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Новая версия набора компиляторов LLVM 3.8"  –2 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 17:27 
> объясните, зачем этот режим интерпретатора "псевдокод может быть преобразован при помощи
> JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы"

Очевидно же! Чтобы выполняь маш.код вместо выполнения байт-кода.  Это быстрее>/<

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

14. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Аноним (??) on 09-Мрт-16, 17:09 
Генерирует все такой же ужасный код на Hello world в 70 инструкций, в отличии от GCC
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

18. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Аноним (??) on 09-Мрт-16, 17:42 
Листинги в студию
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

26. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Аноним (??) on 09-Мрт-16, 22:35 
llvm http://goo.gl/7Fza32
gcc http://goo.gl/wN0mlV
Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

30. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от 1 (??) on 10-Мрт-16, 09:09 
однако если вместо
  zero *= a;
написать
  zero += (a + 1);

то сворачивает нормально.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

32. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Bicycle (ok) on 10-Мрт-16, 20:01 
> llvm http://goo.gl/7Fza32
> gcc http://goo.gl/wN0mlV

Забавно. Кликнул в выпадающем списке Clang <3.4 - собирает не такой УГшный код. Либо они что-то "переоптимизировали", либо что-то "переломали".

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

33. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Аноним (??) on 11-Мрт-16, 04:03 
Умножать разучились.
Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

17. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Андрей (??) on 09-Мрт-16, 17:40 
Новость хорошая. Но на форониксе недавно тестировали, и оказалось, что самый быстрый код генерировал 3.6. У 3.7 результаты хуже, а у 3.8-snapshot - ещё хуже. Странно.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

19. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 17:55 
> Новость хорошая. Но на форониксе недавно тестировали, и оказалось, что самый быстрый
> код генерировал 3.6. У 3.7 результаты хуже, а у 3.8-snapshot -
> ещё хуже. Странно.

Действительно странно. Почему Вы не поминаете, что код из-под gcc был быстрее во всех случаях, кроме 1-2 (из 15 или 20, какжется).

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

21. "Новая версия набора компиляторов LLVM 3.8"  +2 +/
Сообщение от Андрей (??) on 09-Мрт-16, 18:26 
Вообще-то я говорил исключительно о развитии llvm (а не о сравнении с gcc). Ведь это должно быть развитие, а не деградация. Сравнение с gcc - отдельный вопрос.
Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

23. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Андрей (??) on 09-Мрт-16, 18:52 
А ещё по тестам он от версии к версии всё медленнее компилирует. А именно скорость компиляции вообще-то является его замечательной отличительной особенностью.
Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

24. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 19:16 
> А ещё по тестам он от версии к версии всё медленнее компилирует.
> А именно скорость компиляции вообще-то является его замечательной отличительной особенностью.

-O0, tcc и pcc в помощь.

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

29. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от Андрей (??) on 10-Мрт-16, 06:06 
как современного оптимизирующего компилятора как Си, так и Си++.
Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

20. "Новая версия набора компиляторов LLVM 3.8"  +1 +/
Сообщение от Andrey Mitrofanov on 09-Мрт-16, 18:07 
> Новость хорошая. Но на форониксе недавно тестировали, и оказалось, что самый быстрый
> код генерировал 3.6. У 3.7 результаты хуже, а у 3.8-snapshot -
> ещё хуже. Странно.

Где это было? Вот тут http://www.phoronix.com/scan.php?page=article&item=ubuntu-16... Ларабель весь обизворачивался, рассказывая, как "не намного" (но много раз...) llvm отстаёт от gcc.  Но там, кажется, нет 3.6.

Где он сравнивал 3.6 с 3.8? Или "недавно тестировали" заключалось в сложении "в уме" сравнений 3.6 с 3.7 и 3.7 с 3.8?

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

22. "Новая версия набора компиляторов LLVM 3.8"  +2 +/
Сообщение от Андрей (??) on 09-Мрт-16, 18:29 
> Где он сравнивал 3.6 с 3.8? Или "недавно тестировали" заключалось в сложении
> "в уме" сравнений 3.6 с 3.7 и 3.7 с 3.8?

Вообще-то я об этом: http://www.phoronix.com/scan.php?page=article&item=llvm-clan...

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

27. "Новая версия набора компиляторов LLVM 3.8"  –1 +/
Сообщение от Michael Shigorin email(ok) on 09-Мрт-16, 22:55 
> GCC совместимого

Отнюдь: http://clang.debian.net

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

28. "Новая версия набора компиляторов LLVM 3.8"  +/
Сообщение от Аноним (??) on 10-Мрт-16, 01:03 
>Из параллельно **развивающихся** проектов, основанных на LLVM, можно отметить:
>LLVM-Lua
>Самый новый коммит 4 года назад

Убери, оно протухло

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру