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