我最近开始使用SLEPc
对大型稀疏矩阵进行对角化,充分利用了MPI
的优势。一切都很好,除了在最后我想把特征向量写到文件中。我这样做:
PetscViewerASCIIOpen(PETSC_COMM_WORLD, "./data/eigvecs.txt", &viewer);
PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_PYTHON);
EPSVectorsView(eps, viewer);
我使用mpiexec -n 3 ./app
运行代码。生成的文件eigvecs.txt
看起来像这样:
Vec Object: Xr0_EPS_0x84000004_0 3 MPI processes
type: mpi
Process [0]
-0.909229
0.415619
Process [1]
-0.00206267
0.00410161
Process [2]
0.0145993
0.01813
Vec Object: Xi0_EPS_0x84000004_0 3 MPI processes
type: mpi
Process [0]
0.
0.
Process [1]
0.
0.
Process [2]
0.
0.
因此,每个特征向量的分量被并行打印,并且不同的特征向量被一串0分开,也是并行打印的。
我的问题:有没有更好的方法来做到这一点?因为稍后我想在python
或julia
中读取这个文件并做一些计算。如果没有,在python
或julia
中读取这个文件的最佳方法是什么?
谢谢!
1条答案
按热度按时间rnmwe5a21#
与其转储到ascii并在输入时解析,不如使用
PETSCVIEWERHDF5
转储hdf5文件,并使用python的hdf5模块读取文件。这样会更快,而且不会产生转换损失。