一 AMGX環境搭配好之后,按照網頁上readme.txt 編譯example時會出現錯誤,因為最后一個運行選項 -c ../configs/FGMRES_AGGREGATION在configs目錄下是沒有的 可以加上后綴名 如-c../configs/FGMRES_AGGREGATION.json 運行即可。
二 由于example比較復雜 ,想自己寫一個小程序 將AMGX的求解過程理一下,自己寫了一個小矩陣,對照manual文檔和example程序 編譯沒有問題,運行時出現segmentation violation( __libc_start_main()+0xf5)錯誤,后來定位在矩陣讀取造成的, 矩陣讀取使用命令,AMGX_matrix_upload_all_global,完全根據manual文檔寫的(value用double,col及row用int),檢查了很多遍,卡了好幾天,由于example能運行 ,所以排除改命令本身的問題,然后懷疑是config或者resource的問題,于是將自己的矩陣數據寫入到example中segmentation violation.c中,將里面的AMGX_matrix_upload_all_global語句中的數組換成包含自己的矩陣數據的數組,結果同樣出現segmentation violation錯誤,所以基本判斷是自己的數據存儲有問題,但是數據的存儲的結構按照manual來看肯定是沒有問題的。最后實在沒辦法,決定將example程序中的矩陣讀入的各個數組打印出來(value強制轉換為double row及col強制轉換成int),對照網上的下載的矩陣看,其中values及row數組均沒有問題,但是col數組與矩陣文件中數據不一致,如本來應為0 1 3 8的數據 變成了 0 0 1 0 3 0 8 0 這樣子,相信大家能看出來了,和正確的數據相比,后者每個中間都多一個0,于是馬上知道是數據類型不對,原來AMGX_matrix_upload_all_global語句中的col數組默認使用長整形的數據 long int 將數據修改后程序順利運行
其實在manual里提到過用于索引的數據為32位的整型,但是自己計算機基礎不牢,沒有意識到這其實是長整形,慚愧。
新聞熱點
疑難解答