簡體   English   中英

netlib scalapack example1.f - 執行問題

[英]netlib scalapack example1.f - execution problems

我正在嘗試編譯、鏈接和運行 netlib 的 scalapack example1.f 程序。 example1.f 的代碼

代碼編譯並鏈接正常,但執行時顯示結果不穩定。 有時殘差非常低。 其他時候大約是 10E+13。

我還看到,在執行 example1 和其他一些 scalapack 測試程序(隨 scalapack 源代碼提供並與庫 libscalapack.a 一起構建)時,我得到了很多 IEEE_DENORMAL 和 IEEE_UNDERFLOW 標志。

我不得不編輯 example1.f 的這一行:

 DATA NPROW / 2 /, NPCOL / 3 /

DATA NPROW / 2 /, NPCOL / 2 /

因為我只有 4 個處理核心。

我有 MPICH 版本 4.0.2 - 從源代碼 scaLapack 版本 2.2.0 LAPACK 版本 3.10.1 BLAS - LAPACK 3.10.1 的參考實現

這些庫已構建並測試正常。

編譯鏈接命令:mpif77 example1.f -o example1 libmpi.a libscalapack.a liblapack.a librefblas.a

運行/執行命令:

 mpiexec -n 4./example1

或 mpirun -n 4./example1

有時結果是:

 According to the normalized residual the solution is correct. ||A*x - b|| / ( ||x||*||A||*eps*N ) = 1.47973536-253

但其他時候我得到一個不正確的結果:根據歸一化殘差,解決方案是不正確的。 ||A x - b|| / ( ||x|| ||A||每股收益 N ) = 1.87065413E+13

example1 的 output 非常不穩定。

程序 example1 使用 function PDGESV 得到結果。 我在 TESTING 文件夾的 scalapack 測試功能中搜索了 function 的使用,發現程序 xdsvd 使用了它。 我測試了 xdsvd,發現 function 通過了測試並且結果非常穩健,即 output 中顯示的數字始終相同。

感謝您指出解決此問題的方法的任何提示。

我能夠克服我的困難。

真正的問題是沒有必要在 example1.f 的代碼中更改進程網格。

我認為進程數僅限於物理處理器中的實際內核數。 不,事實並非如此。 因此,當我構建並執行 example1.f 的原始代碼時:

 mpif77 example1.f -o example1 libscalapack.a liblapack.a librefblas.a

然后是 mpirun -n 6./example1

我得到了一個正確的答案和一個零信息代碼,表明 scalapack 例程 PDGESV 沒有問題。

 INFO code returned by PDGESV = 0

值得一提的是,IEEE 浮點標志消失了。

我還注意到我不需要在構建命令中提供 libmpi.a。

這不是一個完整的答案,因為我仍然不知道進程網格的變化搞砸了整個事情。 我嘗試改變塊子矩陣的尺寸。 嘗試 NB=3 和 MB=3 與過程網格 1x3 和其他組合沒有成功。

這就是我現在要調查的。 也許我將不得不就如何檢查 scalapack 計算參數的有效性提出另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM