在没有 OpenMP 支持的情况下构建 BLAS、ATLAS 和 LAPACK

Building BLAS, ATLAS and LAPACK without OpenMP support

我一直在使用一些预构建的线性代数库,这些库使用 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);