>

Пакеты Conan>

llvm-openmp

llvm-openmp

Высокопроизводительная реализация спецификации OpenMP API для многопоточного параллельного программирования с общей памятью. Библиотека входит в состав проекта LLVM и предоставляет runtime-библиотеку libomp, а также инструменты для поддержки OpenMP в компиляторах Clang и Flang. Она обеспечивает эффективное выполнение параллельных регионов, конструкций распределения работы, синхронизации и поддержку целевых устройств (offloading) для гетерогенных вычислений.

Особенности

  • полная поддержка стандартов OpenMP 3.1, 4.0, 4.5, 5.0 и 5.1;
  • высокая производительность и масштабируемость на многоядерных процессорах;
  • поддержка гетерогенных вычислений с offloading на GPU (NVIDIA, AMD);
  • интеграция с компиляторами Clang и Flang;
  • наличие оптимизированных алгоритмов синхронизации и распределения работы.

Основные компоненты

LLVM OpenMP предоставляет runtime-библиотеку, инструменты для компилятора и поддержку offloading (подробнее с документацией можно ознакомиться здесь).

Runtime-библиотека libomp

Библиотека времени выполнения реализует все основные механизмы OpenMP: создание параллельных регионов, распределение работы между потоками, синхронизацию и управление данными.

Основные функции интерфейса компилятора:

  • __kmpc_fork_call() — создание параллельного региона с вызовом outlined-функции;
  • __kmpc_for_static_init() — инициализация статического распределения итераций цикла;
  • __kmpc_for_static_fini() — завершение статического распределения;
  • __kmpc_dispatch_init() / __kmpc_dispatch_next() — динамическое и управляемое распределение итераций;
  • __kmpc_barrier() — барьерная синхронизация всех потоков в команде;
  • __kmpc_critical() / __kmpc_end_critical() — вход и выход в критическую секцию;
  • __kmpc_reduce() / __kmpc_end_reduce() — поддержка редукционных операций;
  • __kmpc_omp_task() / __kmpc_omp_task_alloc() — создание и запуск задач.

Поддержка offloading

LLVM OpenMP включает механизмы для выполнения кода на ускорителях (GPU). Это реализовано через библиотеку libomptarget и поддержку в компиляторе.

Основные компоненты offloading:

  • libomptarget — runtime для управления целевыми устройствами;
  • libomptarget.rtl.cuda — поддержка устройств NVIDIA;
  • libomptarget.rtl.amdgpu — поддержка устройств AMD;
  • __tgt_target() — низкоуровневая функция для запуска целевой области;
  • __tgt_target_data_begin() / __tgt_target_data_end() — управление передачей данных;
  • __tgt_target_data_update() — обновление данных на устройстве.

Опции компилятора Clang

Clang предоставляет набор флагов для управления OpenMP-компиляцией:

Основные опции:

  • -fopenmp — включение поддержки OpenMP;
  • -fopenmp-simd — поддержка только SIMD-конструкций;
  • -fopenmp-targets=<triple> — указание целевых архитектур для offloading;
  • --offload-arch=<arch> — указание архитектуры устройства;
  • --offload-arch=native — автоматическое определение архитектуры;
  • -fopenmp-version=<ver> — выбор версии стандарта;
  • -static-openmp — статическая линковка OpenMP runtime;
  • -Xopenmp-target=<triple> <arg> — передача аргументов целевому компилятору;
  • -fopenmp-target-debug — включение отладки в device runtime;
  • -fopenmp-target-jit — генерация JIT-компилируемого кода для offloading.

Переменные окружения для настройки runtime

Библиотека поддерживает множество переменных окружения для контроля поведения во время выполнения.

Основные переменные:

  • OMP_NUM_THREADS — количество потоков в параллельных регионах;
  • OMP_PROC_BIND — привязка потоков к процессорам (true, false, spread, close, master);
  • OMP_PLACES — определение мест размещения потоков (cores, threads, sockets);
  • OMP_SCHEDULE — тип планирования циклов (static, dynamic, guided, auto);
  • OMP_STACKSIZE — размер стека для каждого потока;
  • OMP_THREAD_LIMIT — максимальное количество одновременно используемых потоков;
  • OMP_WAIT_POLICY — стратегия ожидания (active, passive);
  • LIBOMPTARGET_DEVICE_RTL_DEBUG — отладка device runtime;
  • LIBOMPTARGET_DEBUG — отладка для NVIDIA и AMD GPU.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "llvm-openmp/9.0.1@aurora",
    )    

Процесс локальной сборки описан в документации.

llvm-openmp

Лицензия
Apache-2.0 WITH LLVM-exception
Версия
Автор
Daniil Markevich <d.markevich@omp.ru>
Скачать
armv7
271.03 Kb
MD5: af9ae988aa5e94b0d773e897da2e448e
Updated: 05.02.2026, 11:42:58
armv8
348.89 Kb
MD5: 6e382c372e751f67ec85ec8364688fff
Updated: 05.02.2026, 11:23:36
x86_64
399.4 Kb
MD5: 7165b3c21e707b94b4cb28012f14719d
Updated: 05.02.2026, 11:18:40
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.