我正在寻找一个用于处理 Fortran 90/95 中稀疏矩阵的库。我只需要非常基本的运算,例如矩阵向量乘法。你建议我用什么?
我搜索了一下,找到了 BLAS 的一个扩展(?),称为“稀疏 blas”,记录在blast技术论坛规范的第 3 章中:
http://www.netlib.org/blas/blast-forum/ http://www.netlib.org/blas/blast-forum/,
看起来很理想。根据该文档,该库应该有一个 Fortran 95 接口。但是,我无法在任何可以下载的地方找到该规范的实际实现。我的印象是 fortran 95 稀疏 blas 规范并没有真正在任何地方实现?反正不是开源的。
我还发现了一个名为sparsekit的库:
http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html
有人对这两个库之一或 fortran 90/95 的任何其他稀疏矩阵库有任何经验吗?我想了解使用哪一个以及从哪里获取它的建议(对于sparsekit,可以通过上面的链接获取源代码)。稀疏矩阵是否有类似“标准”的东西,就像稠密矩阵的 BLAS 一样?
Cheers,
Arne
好的,我将部分回答我自己的问题:
上面的 @alexurba 提供了在哪里可以找到 Sparse BLAS 的完整 f95 实现:
http://www.netlib.org/toms/818 http://www.netlib.org/toms/818
就是这样!该脚本在您运行它的文件夹中创建所有源代码(我以前从未见过以这种方式提供的软件)。
为了使安装脚本工作,我需要做一些更改:安装说明告诉您编辑安装脚本并选择适当的“arch”。您的选择有:AIX、ALPHA、CRAY、HP、NAG、SGI 和 SUN。这些似乎都不适合我,因为我使用的是 Linux,而我在这台计算机上唯一的 Fortran 编译器是 gfortran。我不太明白这个选项的目的,但我所做的有效操作如下:
1) 在 INSTALL 中,通过设置变量 SB_ARCH='GNU' 来组成一个新的“arch”,我称之为 GNU。 2) 在 SOFTWARE/Makefile 中将 FC = f90 更改为 FC = gfortran, 3) 在 TESTER/ 中将文件 Makefile.NAG 复制到 Makefile.GNU,将 FC = f90 更改为 FC = gfortran,并更改单词“NAG”的所有实例”到“GNU”。 (您可能还想更改 Makefile 中的 FFLAGS 选项。)
之后,我运行 INSTALL,然后运行 TESTER/test_all,测试吐出“0.000...”作为错误,我认为这意味着一切正常。
我必须说我发现找到这个源代码异常困难。幸运的是,当现在搜索“fortran 90 稀疏矩阵库”时,这个线程在谷歌上出现得相当高。
我的最终解决方案:具有讽刺意味的是,在最终找到稀疏 BLAS 的完整实现之后,我决定对于我的问题最好使用更直接的方法,因为我可能需要的是矩阵向量乘法:找出稀疏矩阵要使用的表示形式(压缩稀疏行(CSR)似乎适合我的问题),从稀疏BLAS源代码中挖掘出相应的矩阵向量乘法例程,看看它想要如何输入,然后直接在我的代码中使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)