2016-10-26 10 views
2

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

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

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

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

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

спасибо, что заранее.

ответ

2

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

Количество потоков может быть определена либо на compile time:

$shell> make USE_THREAD=0 

или с использованием явного environment variable:

export OPENBLAS_NUM_THREADS=4 

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

void openblas_set_num_threads(int num_threads); 
+0

один вопрос, если я использую: make USE_THREAD = 1, а после этого я использую экспорт OPENBLAS _NUM_THREADS = 4. Сколько там будет потоков? Поскольку мне нужна реализация BLAS, которая всегда использует 1 поток независимо от того, какие переменные среды определены. – Rob

+0

Если потоковая обработка отключена во время компиляции, она не может быть активирована во время выполнения – ztik

+0

Большое спасибо – Rob