16

我正在寻找一个在 fortran 90/95 中处理稀疏矩阵的库。我只需要非常基本的操作,比如矩阵向量乘法。你建议我用什么?

我搜索了一个名为“sparse blas”的 BLAS 扩展(?),记录在爆炸技术论坛规范的第 3 章中:

http://www.netlib.org/blas/blast-forum/ ,

似乎很理想。根据该文档,该库应该有一个 fortran 95 接口。但是,我无法在可以下载的任何地方找到该规范的实际实现。我的印象是,fortran 95 sparse blas 规范并没有真正在任何地方实现?反正不是开源的。

我还找到了一个名为 sparsekit 的库:

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

任何人都对这两者中的任何一个或任何其他用于 fortran 90/95 的稀疏矩阵库有任何经验吗?我想就使用哪一个以及在哪里获得它的建议(在 sparsekit 的情况下,源代码可通过上述链接获得)。稀疏矩阵是否有“标准”之类的东西,例如 BLAS 用于密集矩阵?

干杯,

阿恩

4

1 回答 1

15

好的,我将部分回答我自己的问题:

上面的@alexurba 提供了在哪里可以找到 Sparse BLAS 的完整 f95 实现:

http://www.netlib.org/toms/818

就是这样!该脚本在您运行它的文件夹中创建所有源代码(我以前从未见过以这种方式提供的软件)。

为了使 INSTALL 脚本工作,我需要做一些更改:安装说明告诉您编辑 INSTALL 脚本并选择适当的“arch”。您的选择是:AIX、ALPHA、CRAY、HP、NAG、SGI 和 SUN。这些对我来说似乎都不合适,因为我使用的是 linux,而我在这台计算机上唯一的 fortran 编译器是 gfortran。我不太明白这个选项的目的,但我所做的工作如下:

1) 在 INSTALL 中,通过设置变量 SB_ARCH='GNU' 来组成一个我称为 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 稀疏矩阵库”时,这个帖子在谷歌上的排名很高。

我的最终解决方案:具有讽刺意味的是,在最终找到 Sparse BLAS 的完整实现之后,我决定对于我的问题最好使用更直接的方法,因为我可能需要的只是矩阵向量乘法:找出什么稀疏矩阵要使用的表示(压缩稀疏行(CSR)似乎适合我的问题),从 Sparse BLAS 源代码中挖掘出相应的矩阵向量乘法例程,看看它希望它如何输入,然后直接在我的代码中使用它.

于 2012-09-11T22:43:18.347 回答