Fortran 90/95稀疏矩阵库?

16

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

我已经搜索了一下,发现BLAS的扩展(称为“稀疏BLAS”),记录在blast技术论坛规范的第3章中:

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

这看起来很理想。 根据该文档,应该有一个Fortran 95界面到该库。 但是,我无法找到任何实际实现此规范的地方,也没有从我能够下载的任何地方找到。 我有点感觉Fortran 95稀疏Blas规范实际上没有真正被实现? 至少没有作为开源项目。

我还发现了一个名为Sparsekit的库:

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

你们有没有使用过这两个库中的任何一个或其他Fortran 90/95稀疏矩阵库? 我想知道应该使用哪个,并且还有从哪里获取它(在Sparsekit的情况下,源代码可通过上面的链接获得)。 是否有类似于BLAS用于密集矩阵的“标准”用于稀疏矩阵吗?

谢谢,

Arne


F95是语言的一个小修订版本,通常被称为F90。我已经有一段时间没有处理大矩阵的事情了,但这似乎是http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html的F90版本。 - Rook
谢谢你的回复,Idigas。但我认为那不是它。在我看来,你链接的是BLAS库,而“sparse blas”并不是其中的一部分。例如,根据规范应该有一个子程序叫做“duscr_begin”(或可能是“blas_duscr_begin”),这是您用于初始化稀疏矩阵的子程序,在BLAS库中我没有找到它的任何信息。我甚至从http://www.netlib.org/sparse-blas/index.html下载了所有文件,并使用“grep -i duscr_begin *.f”命令搜索,但没有找到任何结果。我觉得这非常令人困惑。 - arne
啊,可能是吧。上次我只是匆匆看了一眼。 - Rook
实际上,我认为稀疏BLAS的F90接口恰好在你链接到的页面上。只需从http://www.netlib.org/toms/818下载shell脚本包并通过/bin/sh运行即可创建*.f90文件。如果您没有Bourne shell(例如,如果您在Windows下工作),请告诉我。 - alexurba
http://physics.jacobs-university.de/theine/research/splas/ - user1220978
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'来添加新的“arch”,我称之为GNU。 2)在SOFTWARE / Makefile中将FC = f90更改为FC = gfortran,3)在TESTER /中将文件Makefile.NAG复制到Makefile.GNU,将FC = f90更改为FC = gfortran,并将单词“NAG”的所有实例更改为“GNU”。 (您还可能想更改Makefiles中的FFLAGS选项。)

之后,我运行了INSTALL和TESTER / test_all,测试输出为“0.000 ...”,我认为这意味着一切正常。

我必须说,我发现找到此源代码异常困难。 幸运的是,现在在Google上搜索“fortran 90稀疏矩阵库”时,此线程排名相当高。

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


我已经到了这个点,测试结果显示“0.000…”作为错误,我认为这意味着一切正常。现在,我该如何在需要它们的地方使用这个库(或者这些库)?我应该复制哪些文件到包含我的程序的目录中? - Enlico
链接已经失效了,你知道在哪里可以找到它吗? - Another User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接