首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LAPACK例程线程安全吗?

LAPACK例程线程安全吗?
EN

Stack Overflow用户
提问于 2015-06-17 12:13:51
回答 2查看 3.7K关注 0票数 7

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

我使用Ubuntu14.04LTS并使用我的包管理器安装了LAPACK。安装的版本是:

代码语言:javascript
复制
liblapack3    3.5.0-2ubuntu1     Library of linear algebra routines 3 - shared version

相关的BLAS库是:

代码语言:javascript
复制
libblas3    1.2.20110419-7

因此,我的第一个问题非常简单:我可以在使用OpenMP并行化的循环中使用LAPACK的任何子例程或函数吗?他们的线安全吗?

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

如果这些问题的答案不是所有的LAPACK程序,而是一些LAPACK过程,那么,我能用以下子程序来回答吗?

  • 德格特
  • dgetrf
  • 德格特里
  • 德盖康

最后一个问题是: LAPACK程序是否使用了我所有的核心?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 13:31:32

LAPACK库应该是线程安全的。它不支持多个线程,所以它不使用(所有)您的系统内核。实际上,自v3.3以来,所有LAPACK子程序都是线程安全的,这是一个特定的声明。

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

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

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

票数 10
EN

Stack Overflow用户

发布于 2018-06-04 11:05:35

如果我错了,请纠正我,但我认为通常LAPACK子程序并不是纯的,这不仅是因为打印出消息,而且是因为使用它来返回存储在输入变量中的结果。也就是说,例如,如果您试图反转一个矩阵,子例程类似于"inv(A)",其中A是同时输入和输出(意图(inout)),而不是"inv(A,B)“,其中A只在其中,B只在其中。

它们不可能是纯的,因为修改了它的输入。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30891296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档