【问题标题】:Building BLAS, ATLAS and LAPACK without OpenMP support在没有 OpenMP 支持的情况下构建 BLAS、ATLAS 和 LAPACK
【发布时间】:2016-10-26 09:43:44
【问题描述】:

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

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

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

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

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

非常感谢您。

【问题讨论】:

    标签: multithreading parallel-processing lapack blas atlas


    【解决方案1】:

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

    【讨论】:

    • 一个问题,如果我使用:make USE_THREAD=1,然后我使用 export OPENBLAS_NUM_THREADS=4。会有多少线程?因为无论定义什么环境变量,我都需要一个始终使用 1 个线程的 BLAS 实现。
    • 如果线程在编译时被停用,则无法在运行时重新激活
    • 非常感谢
    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多