我一直在使用一些预先构建的线性代数库,这些库使用OpenMP来并行执行它们。
现在我正在使用OpenMP进行项目并行化某些任务。所以我设置了环境变量OMP_NUM_THREADS。
一些线程使用BLAS和LAPACK线性代数例程。这些库也是并行的,并查看环境变量OMP_NUM_THREADS以查看它们必须使用的线程数。
对于我的项目的要求。我需要通过使用非并行BLAS和LAPACK实现来避免这种嵌套并行化。
什么是最好的图书馆,如何建立?
非常感谢你。
答案 0 :(得分: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);