Материалы по тегу: llvm

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
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
13.04.2020 [21:33], Александр Коляскин

В Linux 5.7 кардинально упростили сборку ядра с помощью LLVM

С прошлого года стало возможным собрать основную ветку ядра x86_64 Linux с помощью компилятора Clang из набора LLVM. Теперь же в обновленной системе Kbuild для ядра Linux 5.7 этот процесс стал значительно проще — достаточно присвоить переменной LLVM значение 1 и для компиляции ядра будет задействован Clang и все утилиты LLVM вместо традиционных GCC и Binutils.

Параметр LLVM=1 может быть передан из командной строки или как переменная окружения.

Единственное исключение заключается в том, что ассемблер из состава LLVM не будет использоваться по умолчанию, так как в ядре все ещё есть некоторые проблемы с его поддержкой. Тем не менее, обновленный Kbuild для Linux 5.7 также включает переменную LLVM_IAS=1 для задействования интегрированного ассемблера, который пока всё ещё считается экспериментальным. В любом случае новые параметры позволяют очень легко перейти к использованию стека компиляторов на основе LLVM для сборки ядра.

Вышедшая недавно десятая версия LLVM получила массу обновлений — экосистема вокруг LLVM расширяется, а популярность проекта только растёт. Конечно, вряд ли мы в ближайшее время увидим полный «переезд» и отказ от GCC. Впрочем, другая открытая ОС, FreeBSD уже сделала шаг в этом направлении: из дерева исходных кодов удалены GCC и сопутствующие утилиты, а для сборки для платформ, которые не готовы к Clang, придётся использовать уже внешний инструментарий.

Постоянный URL: http://servernews.ru/1008322
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
22.03.2020 [23:33], Андрей Галадей

Facebook активно вкладывается в LLVM

Социальная сеть Facebook хочет нанять новых инженеров-разработчиков, специализирующихся на компиляторах, так как компания всё больше уделяет внимание LLVM и его подпроектам, таким как C/C++-компилятор Clang и компоновщик LLD. Также Facebook планирует увеличить свой вклад в развитие языка программирования Swift на базе LLVM.

Это позволит, как ожидается, увеличить эффективность работы LLVM в целом.

А рост производительности позволит улучшить некоторые из фирменных разработок Facebook. К примеру, это оптимизатор BOLT, предназначенный для ускорения работы ELF-файлов под Linux на архитектурах процессоров x86-64 и AArch64. Оптимизатор ускоряет работу больших приложений и улучшает компоновку кода программы. BOLT использует LLVM, но также может работать с файлами, собранными с помощью GCC.

pixabay.com

pixabay.com

Надав Ротем (Nadav Rotem), директор команды разработчиков компиляторов для ИИ, который и поведал о планах компании, не уточнил, насколько крупные инвестиции планируются. Однако можно допустить, что речь идёт о серьёзных суммах. Напомним, что ранее сообщалось о включении в LLVM Google MLIR для ускорения работы с ИИ. Таким образом, LLVM становится ключевым элементом для многих ИИ-систем, потому интерес Facebook к этой тематике вполне понятен.

Отметим, что уже скоро ожидается релиз 10-й версии LLVM. Точной даты нет, но учитывая тот факт, что уже выпущен пятый релиз-кандидат, выход может состояться буквально на днях. 

Постоянный URL: http://servernews.ru/1006547
05.02.2020 [12:42], Алексей Степин

Codeplay обеспечила поддержку Intel oneAPI и Kronos SYCL для ускорителей NVIDIA

Компания Codeplay, работавшая над созданием открытой прослойки для запуска Intel oneAPI и Data Parallel C++ на графических процессорах NVIDIA, дополнила свой проект поддержкой Kronos SYCL.

SYCL — это бесплатная кроссплатформенная прослойка, позволяющая писать приложения для гетерогенных система, используя стандартный C++, что ускоряет и упрощает разработку таких приложений. Intel oneAPI, напомним, расширяет возможности SYCL.

Codeplay анонсировала экспериментальную поддержку SYCL для графических процессоров NVIDIA, причём без посредничества OpenCL. Вместо этого используется LLVM и бэк-энд NVPTX, работающий непосредственно с бинарными драйверами NVIDIA. По сути, используется CUDA, и проект носит соответствующее название, SYCL-for-CUDA.

Пример выбора устройства на SYCL

Пример выбора устройства на SYCL

С использованием этого проекта разработка программного обеспечения теперь может выглядеть следующим образом: для создания нужного приложения можно использовать Intel Data Parallel C++, либо, в случае уже имеющегося CUDA-приложения, портировать его «под SYCL». В последнем случае это позволяет запускать портированное приложение в средах без поддержки CUDA. Разработчики надеются, что Intel включит их наработки в массив кода компилятора Intel LLVM. Более подробную информацию можно найти в официальном блоге Codeplay.

Отдельно отметим рост популярности LLVM как основы для создания новых средств разработки для различных архитектур. На днях был представлен проект HPVM для параллельных гетерогенных вычислений, ранее Google представила MLIR для работы с ИИ-ускорителями, а этой весной в LLVM, наконец, появится официальная поддержка Fortran, что завершит перенос «большой тройки» HPC-языков в инфраструктуру компилятора. 

Постоянный URL: http://servernews.ru/1003005
02.02.2020 [21:53], Андрей Галадей

Представлен компилятор HPVM для параллельных гетерогенных вычислений

Университет Иллинойса и связанные с ним разработчики выпустили HPVM 0.5. Это, как следует из описания, компилятор для гетерогенных систем с параллельным вычислением, рассчитанный для работы, в том числе с графическими процессорами NVIDIA.

Компилятор базируется на LLVM и добавляет к нему несколько важных компонентов. Все исходники доступны на Gitlab университета.

Собственно говоря, HPVM (Heterogeneous Parallel Virtual Machine) — это новое, нейтральное к языку и аппаратному обеспечению промежуточное представление (IR) с собственным набором инструкций (ISA) и планировщиком. Как отмечается, предыдущие системы фокусировались только на одной из этих возможностей. 

Таким образом, HPVM стремится обеспечить эффективную генерацию и оптимизацию кода для гетерогенных систем одновременно с возможностью переносимости кода на другие системы. Самое интересное, что система разрабатывалась с 2018 года, но лишь на этой неделе была открыта в виде готового кода. 

Конечная цель проекта — дать возможность запуска кода без сложных модификаций на GPU, CPU, FPGA и иных ускорителях. Предварительные тесты показали сравнимую с вручную оптимизированным кодом на OpenCL для ускорителей NVIDIA и многоядерных CPU с AVX производительность — пока что поддерживаются только эти платформы. 

Постоянный URL: http://servernews.ru/1002802
18.12.2019 [15:00], Алексей Степин

Fortran-компилятор NVIDIA Flang вольётся в LLVM 10

Компилятор языка Fortran, созданный NVIDIA, и известный сейчас под именем Flang, был принят в семью проекта LLVM ещё весной этого года.

Сейчас же стало известно о том, что Flang окончательно попадёт в основное дерево LLVM с десятым релизом, который состоится в конце февраля 2020 года. Таким образом, LLVM получит качественную поддержку «большой тройки» HPC-языков: C, C++ и Fortran.

Как сообщают зарубежные источники, Flang, ранее известный под именем f18, станет частью LLVM вовремя — то есть, до момента заморозки, которая запланирована на середину января следующего года. Дебаты по поводу окончательного названия компилятора завершились, и имя Flang принято официально, по аналогии с Clang для языков C/C++/Objective-C.

Наличие Flang в составе LLVM позволит эффективно использовать весь массив накопленного ПО на Fortran

Наличие Flang в составе LLVM позволит эффективно использовать весь массив накопленного ПО на Fortran

17 декабря в рассылке LLVM-Dev была опубликована информация о том, что в настоящее время проект Flang готовится к присоединению к моно-репозиторию LLVM. При этом разработчики планируют сохранить всю историю версий Flang — она лишь будет приведена в соответствие со стандартами LLVM. В десятой ветви LLVM Flang будет присутствовать с самого начала, пока же его исходные коды доступны в репозитории flang-compiler/f18 на GitHub.

NVIDIA Flang быстрее GCC, но медленнее PGI

NVIDIA Flang быстрее реализации Fortran в GCC8, но медленнее PGI

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

Постоянный URL: http://servernews.ru/1000014
21.10.2019 [19:08], Андрей Галадей

Улучшения LLVM Clang для AMD Zen 2 задерживаются

Ещё в феврале для компилятора LLVM Clang 9.0 была заявлена начальная поддержка AMD Zen 2. Однако в релиз они до сих пор не попали, в то время как ряд оптимизаций znver2 уже появились в GCC 9.2. 

Как ожидается, планировщик и другие изменения именно для Zen 2 будут добавлены уже в LLVM Clang 10.0, то есть в начале 2020 года. Для тех же, кому не хочется ждать, можно использовать AMD Optimizing C/C++ Compiler 2.0 (AOCC), который с августа поддерживает все те же возможности для znver2. 

phoronix.com

phoronix.com

Поддержка средств разработки — одна из областей, где AMD предстоит улучшить свою работу. Intel же традиционно начинает добавлять патчи для новых микроархитектур примерно за год до выхода самих чипов. Это позволяет гарантировать, что оптимизированная поддержка будет распространяться на выпущенные версии компиляторов и дистрибутивы Linux к моменту появления процессоров на рынке. 

В частности, поддержка процессоров Tiger Lake будет и в GCC 10, и в LLVM Clang 10. Об этом стало известно в конце лета, хотя сами чипы появятся только в первой половине 2020 года. К этому моменту будут готовы и финальные релизы обоих наборов компиляторов.  

Отметим, что процессоры на архитектуре Zen 2 уже несколько месяцев присутствуют на рынке и активно отбивают у Intel всё более крупную часть продаж. В ряде стран лидируют именно «красные» процессоры, причём это касается как настольных, так и серверных решений. 

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