3x3行列の固有値と固有ベクトルを何百万回も見つける必要があるプログラムがあります。これにLAPACKのzheev(はい、エルミート行列です)を使用するように切り替えたところですが、特定のケースでは、プログラムは約1分20秒で実行されます。アルゴリズムをOpenMPと並列化したところ(以前と同じように)、突然プログラムが約9mで実行されました。zheevへの呼び出しをコメントアウトすると、プログラムは9秒で実行されます。
私はオンラインで調べて、OpenMPを使用するためにBLASライブラリをコンパイルできることを(私が理解しているように)見つけましたが、それがここでの問題ではないと思います。
残念ながら、このコードは私の仕事からのものです。デフォルトの場所にlapackがインストールされておらず、コンパイル時にどのコンパイラオプションが使用されたかわかりません。これはまた、問題を実証するための最小限のテストプログラムをコンパイルすることを困難にします。
問題が何であるかについてのアイデアはありますか?
編集:
私は、OpenMPでzheevが失敗していることを知りました。これは、おそらく実行速度が遅いことに関係しています。LAPACKの一部のルーチンがスレッドセーフではない(またはスレッドセーフなバリアントがある)ことを読みましたが、zheevがそれらのルーチンの1つを呼び出しているかどうかを確認するにはどうすればよいですか?それを変更できますか?