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