Материалы по тегу: компиляторы

05.12.2020 [00:07], Андрей Галадей

AMD выпустила компилятор AOCC 2.3, но опять опаздывает с добавлением полноценной поддержки Zen 3 в GCC и LLVM

Компания AMD сообщила о добавлении официальной поддержки процессоров Ryzen 5000 на архитектуре Zen 3 в компилятор GCC. Как обычно, произошло это с некоторым опозданием. Хорошим тоном считается подготовка ПО для разработчиков примерно за полгода до выхода чипов на рынок. Например, Intel ещё в июле добавила подддержку Alder Lake и Sapphire Rapids в GCC. Это гарантирует, что к моменту начала продаж компиляторы будут поддерживать новое «железо».

Phoronix сообщает, что для GCC выпущен первый патч, который добавляет поддержку Zen 3 с новой опцией -march=znver3. При этом других изменений там пока нет, а все специализированные оптимизации, касающиеся, например, планировщика, остаются прежними, как и для Zen 2. Позднее, как ожидается, для znver3 будет произведена более точная настройка под новую микроархитектуру.

picsart.com

picsart.com

Ожидается, что полная поддержка будет реализована в GCC 11 или в GCC 12. В любом случае, это означает, что стабильный компилятор GCC не сможет в полной мере использовать преимущества микроархитектуры Zen 3 до 2021 года. На данный момент поддержка znver3 касается только корректной работы на процессорах Zen 2. Это очень похоже на базовую поддержку znver3 в LLVM.

Впрочем, в скором времени AMD выпустит свой официальный патч для LLVM/Clang. Помимо этого, компания выпустила AOCC 2.3 в качестве своего базового компилятора на основе LLVM 11.0 с добавлением различных патчей AMD Zen. Здесь ситуация аналогична — AOCC 2.3 по-прежнему ориентирован на Zen 2, но содержит базовую поддержку Zen 3.

Тем не менее, такая ситуация возникает не впервые — в своё время задержались улучшения LLVM для AMD Zen 2. Задержка с добавлением патчей приводит к тому, что они не успевают попасть в стабильные версии наборов компиляторов и, как следствие, в ближайшие мажорные версии основных дистрибутивов.

Постоянный URL: http://servernews.ru/1027076
03.12.2020 [11:58], Юрий Поздеев

Xilinx приобрела Falcon Computing, чтобы получить продвинутый компилятор Merlin

Xilinx приобрела Falcon Computing и теперь владеет технологиями компиляторов, для создания высокопроизводительных приложений с использованием FPGA и адаптивных систем на кристалле (SoC).

Falcon Computing Solutions разработала технологии оптимизации для компилятора высокого уровня (HLS), который позволяет использовать аппаратное ускорение для приложений. Xilinx заявила, что после приобретения Falcon Computing, ее технологии адаптивных вычислений станут более доступными для разработчиков программного обеспечения за счет улучшения унифицированной программной платформы Vitis с помощью автоматизированных оптимизаций для аппаратного обеспечения.

Интеграция технологий Falcon Computing в платформу Vitis позволит ускорять приложения, написанные на C++, не обладая при этом глубокими знаниями оборудования, что снижает нагрузку на разработчиков приложений при адаптации своего кода для конкретного «железа». По словам Falcon Computing, использование Merlin позволяет достигать ускорения на порядок больше, чем при использовании обычных средств разработки, за счет повторного использования данных при вычислениях, разделения памяти, параллельного и конвейерного ускорения вычислений.

Использование единого исходного кода, по стилю похожего на OpenMP, очень удобно для большинства разработчиков на C/C++, которые привыкли использовать стандартные конструкции языка программирования при разработке своих приложений.

Компилятор Merlin от Falcon Computing позволяет приложениям использовать параллельные вычисления в комбинации со специализированным оборудованием, таким как многоядерные процессоры, графические ускорители и FPGA. Компилятор автоматически преобразует код, написанный на C/C++ в код для FPGA, таким образом устраняя разрыв в специализированных навыках разработчиков и делая доступным эту технологию для более широкого круга программистов, которые до этого имели сложности с оптимизацией кода для гетерогенных платформ.

Falcon Computing не первая компания, которую купила Xilinx, в 2010 году она приобрела AutoESL (который теперь стал платформой Vitis), в 2013 году Neptune Design Automation (теперь Vivado). Xilinx стремится создать большую экосистему для эффективной разработки, покупая профильные компании, причем это не поглощение с целью уничтожения конкурентов, а приобретение технологий, с целью расширения своего бизнеса.

Постоянный URL: http://servernews.ru/1026894
03.11.2020 [17:40], Илья Коваль

GCC 11 и LLVM 12 позволят учитывать микроархитектурные различия x86-64

Два популярных открытых средства разработки, GCC 11 и LLVM Clang 12, получили возможность более тонкой оптимизации собираемого кода с учётом наличия того или иного типового набора общих инструкций x86-64. Это не отменяет возможность оптимизации под конкретные поколения процессоров, но позволяет легче задавать системные требования не только для отдельных программ, но и, например, для крупных проектов, которые могут работать на разных CPU.

LLVM принимает новые опции через параметр -march=, а GCC — через опцию --with-arch_64=. Список ключей, которые соответствуют наборам инструкций, одинаков:

  • x86-64: CMOV, CMPXCHG8B, FPU, FXSR, MMX, FXSR, SCE, SSE, SSE2
  • x86-64-v2: CMPXCHG16B, LAHF-SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3
  • x86-64-v3: AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE
  • x86-64-v4: AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL
Фото: Jeh/Wikipedia

Фото: Jeh/Wikipedia

Первый уровень является наиболее общим и универсальным вариантом для всех 64-бит процессоров x86. x86-64-v2 близок по набору дополнительных инструкций к архитектуре Nehalem, а x86-64-v3 — к Haswell. А вот x86-64-v4 из-за требования AVX-512 на текущий момент фактически ограничен достаточно современными процессорами Intel. В дальнейшем число наборов будет наверняка расширено, так как в v4, к примеру, не попали инструкции AVX-VNNI (в текущем виде это пока что полный эквивалент AVX512-VNNI).

Стандартизация наборов проведена при участии Red Hat, которая уже давно хочет повысить минимальные системные требования, чтобы более полно использовать возможности современных процессоров, а не собирать код под наиболее общий вариант x86-64, который включает CPU 15-летней давности. Новый инструментарий GCC и LLVM поможет компании в осуществлении задуманного. Этот шаг, очевидно, повлияет и на других игроков в индустрии.

Постоянный URL: http://servernews.ru/1024493
01.10.2020 [19:04], Алексей Степин

Мир, дружба, oneAPI: открытая платформа Intel упростит разработку для чипов AMD, ARM, NVIDIA, POWER и FPGA

Ни для кого не секрет, что единой оптимальной вычислительной архитектуры не существует. Разные виды задач и сценариев порождают и разные виды нагрузок, с которыми разные процессоры справляются по-разному. Программировать подо всё это разнообразие очень непросто, вот почему Intel взяла на себя задачу создать единую модель разработки в рамках проекта oneAPI, первый мажорный релиз которой вышел на днях.

Архитектура Intel oneAPI

Архитектура Intel oneAPI

По мере того, как вычислительная техника и ИТ-технологии проникают во все сферы жизни, рождаются всё новые и новые виды нагрузок. К примеру, в последнее время очень популярна поддержка целочисленных форматов типа INT8 для задач машинного обучения, где точностью, достигаемой в формате FP64, можно пожертвовать ради скорости и эффективности. Процессоры «обвешиваются» всё новыми инструкциями, появляются целые новые классы вычислительных устройств — и над всеми ними встаёт вопрос о том, как подо всё это эффективно писать программное обеспечение.

Многие видят ответ в создании унифицированных прослоек, вроде упомянутой недавно VMware с её Project Monterey. Корпорация Intel придерживается похожей точки зрения со своим проектом oneAPI. Данная разработка представляет собой унифицированную и открытую программную платформу, позволяющую абстрагироваться от аппаратной архитектуры устройств и писать код, задействующий все имеющиеся вычислительные ресурсы, будь то CPU, GPU, DPU или иные. Основой для oneAPI стал язык DPC++, который, в свою очередь, базируется на стандартах C++ и Kronos SYCL.

Один API, чтобы править всеми

Один API, чтобы править всеми (видами вычислений)

Впервые об oneAPI мир узнал в конце 2018 года, а сегодня проект достиг важной вехи: компания официально объявила о релизе oneAPI 1.0. Проект, как уже было сказано, имеет открытые спецификации, с которыми можно ознакомиться в соответствующем разделе сайта, посвящённого oneAPI; есть у новинки и свой репозиторий на GitHub. В состав oneAPI входят базовые библиотеки, компилятор DPC++ на базе LLVM/Clang, ряд библиотек производительности Intel, а также средства анализа и отладки кода.

Немаловажен и тот факт, что в состав проекта входит средство миграции кода, написанного на CUDA — таким образом, всё программное богатство, наработанное для ускорителей NVIDIA, может быть сделано доступным и для других платформ. Отдельно заслуживает упоминание богатство библиотек для создания приложений с использованием машинного обучения и аналитики: oneDNNL, one Video Processing Library и других. Опробовать oneAPI можно также в специальной облачной «песочнице», развёрнутой Intel специально для разработчиков, заинтересованных в новых методах разработки ПО.

Так как и сама платформа, и нижележащая инфраструктура LLVM открыты, расширить возможности oneAPI относительно просто, чем и занимается ряд организаций. Например, над совместимостью с NVIDIA работает Codeplay, центр URZ занят добавлением расширений DPC++ в проект hipSYCL, который работает с любыми CPU (OpenMP), GPU NVIDIA (CUDA) и AMD Radeon (HIPC/ROCm). А некоторые one-библиотеки от самой Intel уже имеют поддержку ARM и POWER. Для собственных FPGA у Intel тоже есть наработки, а вот Xilinx, похоже, пока остаётся за бортом. Последняя, впрочем, имеет своё видение процесса разработки.

Постоянный URL: http://servernews.ru/1021990
02.09.2020 [22:58], Илья Коваль

Компиляторы могут остаться без поддержки Intel MMX

Набор SIMD-инструкций Intel MMX, представленный в 1997 году, является откровенно устаревшим и уже давно вытеснен различными версиями SSE и AVX. Тем не менее, в средствах разработки они всё ещё формально поддерживаются. Правда, в силу редкости использования, их имплементация страдает от багов. Поэтому неудивительно, что их в очередной раз предложили выкинуть из популярного набора компиляторов LLVM.

В обсуждении, начатом в листах рассылки, предлагается переписать и заменить интринсики для MMX на новые, использующие уже имеющиеся для SSE или, лучше, SSE2. Текущие требуют некоторый внимательности от разработчика, так как при некорректном использовании программа будет не падать, а выдавать некорректные результаты. В дальнейшем предлагается исключить MMX из представления LLVM IR.

Единственный способ использования этих инструкций и сопутствующих регистров, если это по какой-то причине действительно нужно — использование ассемблерных вставок непосредственно в коде. Любопытно, что, судя по всему, даже физически отдельных регистров для x87/MMX в современных процессорах уже нет — они делят «кремний» с регистрами для маскирования AVX-512, так как вероятность высокой нагрузки со стороны обоих типов инструкций одновременно крайне маловероятна.

Отказ от MMX, естественно, повысит минимальные требования LLVM. Однако сейчас трудно найти работающую x86-систему, в которой нет поддержки SSE2 или хотя бы SSE. Это перекликается с активизировавшимися призывами отказаться от поддержки старых CPU вообще, 32-битных и без современных инструкций. В частности, Fedora и RHEL уже движутся в этом направлении.

Постоянный URL: http://servernews.ru/1019749
01.09.2020 [22:55], Илья Коваль

LLVM 12 вслед за GCC 11 внедряет поддержку грядущей серверной платформы Intel Sapphire Rapids

Без поддержки со стороны ПО и особенно средств для его разработки, толку от любого аппаратного обеспечения мало. Поэтому вендоры стараются заранее добавить поддержку новых платформ в популярные проекты. В первую очередь, в наборы компиляторов. Причём сделать это надо заранее, до выхода очередного мажорного релиза. Из патчей для них также можно почерпнуть информацию об особенностях ещё не вышедших платформ.

Конкретно с Sapphire Rapids подготовка к выходу выглядит несколько преждевременной, так как эти чипы появятся только в 2021 году или, если говорить точнее, до конца 2021 года. Мы уже знаем, что они получат поддержку PCIe 5.0 и DDR5, но гораздо интереснее то, какие инструкции они получат. Впрочем, тут пока ничего неожиданного нет — статус самого крупного и значимого нововведения после появления AVX-512 всё ещё числится за набором Intel AMX, который создан специально для матричных операций. Они расширят возможности работы с машинными обучением, дополнив поддержку bfloat16 и VNNI.

Фото: PCWatch Japan

Фото: PCWatch Japan

Clang в LLVM получит поддержку AMX-TILE, AMX-INT8 и AMX-BF16 в дополнение к ранее объявленным в GCC инструкциям AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16 и AVX512VP2INTERSECT. Кроме того, есть ряд новых инструкция, связанных с TSX, работой с кешем/регистрами/буферами, энергосбережением и трассировкой в самом CPU. Это пока не полный список всех нововведений, но большая часть из них должна быть добавлена к финальным релизам: GCC 11 должен появиться в самом начале 2021 года, а выход LLVM 12 запланирован на февраль.

Постоянный URL: http://servernews.ru/1019649
29.08.2020 [20:41], Илья Коваль

Ещё капельку: Microsoft занимается оптимизацией Linux для серверных ARM

Microsoft является платиновым членом Linux Foundation, в её облаке Azure доминирует Linux и, в целом, уже пора перестать удивляться работе корпорации с этой ОС. Но она всё равно порой преподносит сюрпризы. На конференции Linux Plumbers Conference 2020 разработчики компании рассказали об экспериментах по оптимизации сборки ядра Linux.

Любопытно, что эта работа выполняется по внутреннему запросу, а оптимизация делается для повышения производительности Linux на ARM-процессорах Marvell ThunderX2. Это особенно интересно в свете резко изменившихся планов Marvel относительно будущих ThunderX3: компания займётся достаточно глубокой оптимизацией CPU под нужды конкретных заказчиков и не будет выпускать «общие» версии. Теперь она ориентирована в первую очередь на гиперскейлеров, к которым относится и Microsoft.

Так вот, разработчики Microsoft изучают использование LTO (Link Time Optimization) вместе с PGO (Profile-guided optimization) для ускорения работы ядра. Обе техники не являются чем-то новым сами по себе, однако LTO лишь относительно недавно стала применяться для сборки ядра Linux и других пакетов в некоторых дистрибутивах, что было связано с незрелостью её поддержки в популярных открытых наборах компиляторов GCC и LLVM. А вот применение PGO для ядра всё ещё довольно редко. Интересно, что Microsoft активно использует LTO и PGO в Windows — PGO даёт улучшение производительности на 5% – 20 %.

LTO позволяет компилятору перед компоновкой «окинуть взглядом» весь проект целиком, а не только отдельные объекты во время компиляции, и сделать оптимизацию. PGO же ещё подразумевает множественные тестовые запуски итоговых бинарных файлов и отслеживание их поведения с целью дальнейшей оптимизации на основе собранной статистики. Обе техники заметно повышают требования компиляторов к ресурсам (особенно памяти) и увеличивают время сборки, порой весьма существенно.

На той же конференции разработчики Google поделились своим опытом оптимизации сборки ядра. В частности, продукты под брендом Pixel с 2018 года получают ядра с LTO. А сейчас корпорация изучает работу AutoFDO — ещё одной техники, которая собирает данные о работе от perf-подсистемы ядра и аппаратных счётчиков CPU. Собранные профили «скармливаются» компилятору. Таким образом для x86-64 удалось на 12% сократить число используемых циклов CPU. На других платформах результат тоже положительный, но уже не такой заметный.

Постоянный URL: http://servernews.ru/1019418
02.06.2020 [13:42], Андрей Крупин

Опубликовано руководство по программированию на платформе «Эльбрус»

Компания МЦСТ (Московский центр SPARC-технологий) разместила в отрытом доступе руководство по эффективному программированию на платформе «Эльбрус».

Руководство предназначено для разработчиков, занимающихся созданием, портированием и оптимизацией приложений для вычислительной платформы «Эльбрус» с использованием языков программирования C и C++.

В опубликованном документе изложены основы архитектуры платформы и приёмы работы с компилятором LCC, приведено описание языка ассемблера и системы команд процессоров «Эльбрус», представлены техники по оптимизации и повышению производительности ПО за счёт распараллеливания исполнимого кода на уровне инструкций. Отдельное внимание уделено инструментам для анализа производительности кода на платформе «Эльбрус».

Руководство распространяется по лицензии Creative Commons BY 4.0 и представлено в форматах PDF и HTML. Скачать документ можно по ссылке mcst.ru/elbrus_prog.

Постоянный URL: http://servernews.ru/1012445
07.05.2020 [21:57], Алексей Степин

Вышел релиз GCC 10: поддержка Radeon OpenMP, Intel Cooper Lake и новых ARM-платформ

Наряду с проприетарными компиляторами в индустрии широко используется набор GCC (GNU Complier Collection), включающий в себя поддержку не только C и С++, но и таких языков, как Objective-C, Java, Fortran, Ada, Go, GAS и D. Буквально сегодня было объявлено о первом релизе GCC 10 ветки stable.

Речь идёт о версии GCC 10.1. Она вышла спустя полтора месяца после релиза другого, не менее значимого проекта LLVM 10.

Новая версия содержит ряд нововведений. В частности, поддерживается новый стандарт C++20 и содержит архитектурные оптимизации под архитектуры Intel Tiger Lake и Cooper Lake. Также внедрена поддержка ряда вариантов архитектуры ARM:

  • Cortex-A77;
  • Cortex-A76AW;
  • Cortex-A65/65AE;
  • Cortex-A34;
  • Marvell Thunder X3.

Появилась поддержка OpenMP и OpenACC для ускорителей AMD Radeon; правда, она пока ограничена архитектурами Fiji и Vega, более новая Navi ещё не поддерживается. OpenACC имеет версию 2.6 и поддерживается компиляторами C, C++ и Fortran.

Прототип Intel Tiger Lake (фото AnandTech)

Прототип Intel Tiger Lake (фото AnandTech)

Помимо x86 и ARM проект получил поддержку микроконтроллеров семейства AVR XMEGA (серии ATtiny и ATmega, полный список можно найти здесь). А вот поддержка векторных расширений PowerPC отмечена, как «устаревшая»; скорее всего, она будет окончательно удалена в GCC 11.

В GCC 10 версии также появился статический анализатор, который должен помочь в поиске проблемных мест в коде. Кроме того, в пакете содержится ряд исправлений и оптимизаций. Полный список обновлений и дополнений содержится на сайте GCC. Там же можно скачать новую версию, либо воспользоваться для скачивания одним из зеркал проекта.

Постоянный URL: http://servernews.ru/1010406
24.03.2020 [20:49], Владимир Фетисов

Релиз LLVM и Clang 10: поддержка новых CPU и масса других улучшений

Выпуск десятой версии LLVM затянулся почти на месяц. Однако сегодня, наконец, релиз LLVM 10.0.0 стал доступен вместе с подпроектами, такими как компилятор С/С++ Clang и компоновщик LLDB. Компилятор Clang 10 доступен с улучшенной поддержкой С++ 20 и другими улучшениями. 

Исходный можно на странице разработчиков в GitHub, а бинарные сборки станут доступны в ближайшее время.

LLVM 10 является наиболее актуальной на данный момент версией чрезвычайно популярного стека компиляторов с открытым исходным кодом, который охватывает многие архитектуры, устройства и операционные системы. В LLVM 10.0 появилось много новых функций, в том числе улучшенная поддержка архитектуры AMD Zen 2 и процессоров Intel Tiger Lake, проведена работа на AVX-512, добавлены опции для включения защиты от последних багов в CPU, включена поддержка процессоров ARM Neoverse N1 и E1, IBM z15, Octeon+ и ядер ARM Cortex-A65(AE). Кроме того, появились новые оптимизации для IBM POWER, RISC-V, ARMv8.1-M.

Использование многоуровневого промежуточного представления MLIR (Multi-Level Intermediate Representation) от Google, популярность которого с момента запуска в прошлом году существенно возросла, позволит ускорить оптимизацию ПО для машинного обучения, за счёт чего LLVM сможет стать важным элементом многих ИИ-систем. Кроме того, созданный разработчиками NVIDIA компилятор языка Fortran, известный под именем Flang, также стал частью проекта LLVM 10.

Не так давно стало известно о том, что Facebook планирует нанять новых разработчиков, специализирующихся на компиляторах, поскольку компания продолжает уделять внимание LLVM и его подпроектам, намереваясь также увеличить свой вклад в развитие языка программирования Swift на базе LLVM. Ведутся и другие перспективные разработки в рамках экосистемы LLVM — например, HPVM

Постоянный URL: http://servernews.ru/1006728
Система Orphus