一 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位的整型,但是自己计算机基础不牢,没有意识到这其实是长整形,惭愧。