gpt4 book ai didi

c++ - 由于 LAPACK,使用 OpenMP 的程序速度较慢

转载 作者:行者123 更新时间:2023-11-30 02:04:49 27 4
gpt4 key购买 nike

我有一个程序需要数百万次查找 3x3 矩阵的特征值和特征向量。为此,我刚刚转而使用 LAPACK 的 zheev(是的,它们是厄密矩阵),对于特定情况,程序运行时间约为 1 分 20 秒。我已经将我的算法与 OpenMP 并行化(就像我们之前所做的那样),突然间我的程序运行了大约 9m。我注释掉了对 zheev 的调用,我的程序在 9 秒内运行。

我在网上四处查看并发现(据我所知)您可以编译 BLAS 库以使用 OpenMP,但我认为这不是这里的问题。

不幸的是,这段代码来 self 的工作,我没有在默认位置安装 lapack,而且我不知道编译时使用了哪些编译器选项。这也让我很难编写一个最小的测试程序来演示这个问题。

关于问题可能是什么的任何想法?

编辑:

我刚刚发现 OpenMP zheev 失败了,这可能与运行速度变慢有关。我读到 LAPACK 中的一些例程不是线程安全的(或者它们有线程安全的变体),我如何才能确定 zheev 是否​​正在调用这些例程之一,我可以更改它吗?

最佳答案

暂时搁置您的 OpenMP 问题,如果您的代码对性能敏感,您可能不想使用 LAPACK 来查找 3x3 矩阵的特征值和特征向量; LAPACK 针对的是“大”问题。更重要的是,对于维数小于 5 的矩阵的特定情况,您可以直接计算特征值,因此您可以使用比用于一般矩阵(必然需要迭代)更简单的算法。

回想一下,3x3 矩阵的特征多项式是三次多项式,这意味着您可以直接计算它的根(即特征值)。一旦知道了特征值,就可以直接对每个特征值lambda求解(A - lambda * I)x = 0,得到对应的特征向量。

关于c++ - 由于 LAPACK,使用 OpenMP 的程序速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142811/

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