gpt4 book ai didi

multithreading - LAPACK 例程线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 11:22:56 25 4
gpt4 key购买 nike

我是使用 LAPACK 例程的新手,所以我对它们不是很了解,我想在并行化循环(openmp)中使用它们。

我使用 Ubuntu 14.04LTS 并使用我的包管理器安装了 LAPACK。安装的版本是:

liblapack3    3.5.0-2ubuntu1     Library of linear algebra routines 3 - shared version

关联的 BLAS 库是:
libblas3    1.2.20110419-7

所以,我的第一个问题很简单:我可以在使用 OpenMP 并行化的循环中使用 LAPACK 的任何子例程或函数吗?。 Id est,它们是线程安全的吗?。

另一个问题是:我可以在我的纯子例程中使用 LAPACK 的任何子例程或函数吗?,id est,在我编码并定义为纯子例程中。

如果这些问题的答案是“不是针对所有 LAPACK 过程,而是针对其中一些过程”,那么,我可以使用以下子例程来完成吗?:
  • Dagger
  • dgetrf
  • dgetri
  • dgecon

  • 还有最后一个问题:LAPACK 过程是否使用了我所有的内核?,我想,它们是否已经并行?。

    最佳答案

    LAPACK 库预计是线程安全的。它不支持多线程,因此它不使用(所有)您的系统内核。实际上有一个特定的声明,所有 LAPACK 子程序都是线程安全的,因为 v3.3 .

    另一方面,LAPACK 旨在广泛使用 BLAS 库子程序。基本的 BLAS 也不使用任何线程。然而,有几种流行的 BLAS 实现(ATLAS、OpenBLAS、MKL)具有大多数 BLAS 子例程的线程版本。如果您的 LAPACK 库正在使用上述 BLAS 库之一,那么它们的子例程很可能会启动自己的线程。当然,在上述库中,用户可以控制使用的线程数。您可以查阅他们的文档以找出方法。

    因此,您需要检查您使用的 BLAS 库的哪个实现,以便清楚了解 LAPACK 的线程使用情况。

    关于纯函数内部的用法,我想指出的是,BLAS 和 LAPACK 都会在屏幕上打印特定的错误消息(stdout 或 stderr)。这些消息通常与子程序的错误使用有关,而不是数学错误。例如,如果您尝试反转零维矩阵。如果您可以确保这一点,那么您可能可以说它是纯粹的。

    关于multithreading - LAPACK 例程线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891296/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com