Создание BLAS, ATLAS и LAPACK без поддержки OpenMP

Я использовал некоторые готовые библиотеки линейной алгебры, которые используют OpenMP для распараллеливания их выполнения.

Прямо сейчас я работаю над проектом с OpenMP, чтобы распараллелить некоторые задачи. Поэтому я установил переменную окружения OMP_NUM_THREADS.

Некоторые потоки используют процедуры линейной алгебры BLAS и LAPACK. Эти библиотеки также являются параллельными и обращаются к переменной среды OMP_NUM_THREADS, чтобы увидеть количество потоков, которые они должны использовать.

Для требований моего проекта. Мне нужно избежать этого вложенного распараллеливания, используя непараллельные реализации BLAS и LAPACK.

Какая библиотека самая лучшая и как ее построить?

Заранее большое спасибо.


person Rob    schedule 26.10.2016    source источник


Ответы (1)


Вы можете использовать OpenBLAS. Эта библиотека включает в себя одну версию подпрограмм LAPACK и довольно гибкая в отношении потоковой передачи.

Количество потоков можно определить во время во время компиляции:

$shell> make USE_THREAD=0

или используя явную переменную среды:

export OPENBLAS_NUM_THREADS=4

или используя библиотеку API во время выполнения:

void openblas_set_num_threads(int num_threads);
person ztik    schedule 26.10.2016
comment
Один вопрос, если я использую: make USE_THREAD = 1, а после этого я использую экспорт OPENBLAS_NUM_THREADS = 4. Сколько будет потоков? Потому что мне нужна реализация BLAS, которая всегда использует 1 поток независимо от того, какие переменные среды определены. - person Rob; 26.10.2016
comment
Если потоки отключены во время компиляции, их нельзя повторно активировать во время выполнения. - person ztik; 26.10.2016
comment
Большое тебе спасибо - person Rob; 26.10.2016