【问题标题】:Fortran 90/95 library for sparse matrices?用于稀疏矩阵的 Fortran 90/95 库?
【发布时间】:2012-09-08 06:06:43
【问题描述】:

我正在寻找一个在 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 是密集矩阵吗?

干杯,

阿恩

【问题讨论】:

  • F95,它是语言的一个小版本,通常在 F90 之下。我已经有一段时间没有对大型矩阵做过任何事情了,但这似乎是people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html F90 版本。
  • 感谢 Idigas,但我不这么认为。在我看来,您链接到的是 BLAS 库,而“稀疏 blas”不是其中的一部分。例如,应该有一个名为“duscr_begin”(或者可能是“blas_duscr_begin”)的子程序(根据规范),它是用于初始化稀疏矩阵的子程序,我在 BLAS 库中的任何地方都没有找到它。我什至从netlib.org/sparse-blas/index.html 下载了所有文件,并且没有任何运气地执行“grep -i duscr_begin *.f”。我发现这很令人困惑。
  • 啊,可以。上次只是匆匆看了一下。
  • 实际上我认为稀疏 BLAS 的 F90 接口恰好在您链接到的页面上。只需从:http://www.netlib.org/toms/818 下载 shell 脚本包并通过 /bin/sh 运行它。然后将创建 *.f90 文件。如果您没有可用的 Bourne shell(例如,如果您在 Windows 下工作),请告诉我。

标签: fortran sparse-matrix fortran90 blas fortran95


【解决方案1】:

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

上面的@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)似乎适合我的问题),从稀疏 BLAS 源代码中挖掘出相应的矩阵向量乘法例程,看看它想要如何输入,然后直接使用它在我的代码中。

【讨论】:

  • 我正处于测试吐出“0.000...”作为错误的地步,我认为这意味着一切正常。现在,如何在我需要的地方使用这个库(或库?)?我应该将哪些文件复制到包含我自己的程序的目录中?
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2013-06-18
  • 2016-10-02
  • 2011-10-07
  • 1970-01-01
相关资源
最近更新 更多