我有一个程序需要数百万次找到 3x3 矩阵的特征值和特征向量。为此,我刚刚切换到使用 LAPACK 的 zheev(是的,它们是 Hermitian 矩阵),对于特定情况,该程序在大约 1 分 20 秒内运行。我已经用 OpenMP 并行化了我的算法(就像我们之前所做的那样),突然我的程序运行了大约 9m。我注释掉对 zheev 的调用,我的程序在 9 秒内运行。
我在网上环顾四周,发现(据我所知)您可以编译您的 BLAS 库以使用 OpenMP,但我认为这不是问题所在。
不幸的是,这段代码来自我的工作,我没有在默认位置安装 lapack,而且我不知道在编译它时使用了哪些编译器选项。这也让我很难编译一个最小的测试程序来演示这个问题。
关于问题可能是什么的任何想法?
编辑:
我刚刚发现 OpenMP zheev 失败了,这可能与它运行速度较慢有关。我已经读过 LAPACK 中的一些例程不是线程安全的(或者它们具有线程安全的变体),我怎样才能知道 zheev 是否正在调用这些例程之一,我可以改变它吗?