multithreading - 在不支持 OpenMP 的情况下构建 BLAS、ATLAS 和 LAPACK

标签 multithreading parallel-processing lapack blas atlas

我一直在使用一些预构建的线性代数库,这些库使用 OpenMP 来并行执行。

现在我正在使用 OpenMP 来并行处理一些任务。所以我设置了环境变量OMP_NUM_THREADS。

某些线程使用 BLAS 和 LAPACK 线性代数例程。这些库也是并行的,并查看环境变量 OMP_NUM_THREADS 以了解它们必须使用的线程数。

为了我的项目的要求。我需要通过使用非并行 BLAS 和 LAPACK 实现来避免这种嵌套并行化。

什么是最好的库以及如何构建它?

提前非常感谢您。

最佳答案

您可以使用 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);

关于multithreading - 在不支持 OpenMP 的情况下构建 BLAS、ATLAS 和 LAPACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258838/

相关文章:

java - 如何检测 OutofMemoryError 的原因?

c++ - 用零并行填充 std::vector

具有 GSL、LAPACK 或 CBLAS 等数学库的 C++ 性能与具有 R 函数的 Rinside 的 C++ 相比?

python - Cython lapack 不会覆盖参数

multithreading - 如何防止Lua中的竞争情况?

c - pthread编程,线程不会同时运行

java - java写并行算法时 "serial thread-confinement"是什么意思?

c - 为什么 4 线程程序在 1 核 VM 上比在 4 核 VM 上运行得更快?

.net - Task.WaitAll 的线程局部对象

optimization - 具有架构优化的 Docker 镜像?