问题标签 [scalapack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
750 浏览

c++ - 转换 gsl 线性代数以用于 scalapack 或其他并行矩阵库

我有一个深度嵌入 GNU 科学库 (GSL) 矩阵算术的代码,该代码的主要计算是求解一个大型线性方程组,该方程组需要很长时间串行和 GSL 和 BLAS 函数,有没有办法并行化此计算或将其转换为在 ScaLAPACK 等已经并行的库中使用?

0 投票
1 回答
954 浏览

c++ - 从 C++ 调用 ScaLAPACK

嗨,任何人都可以为我提供一个从 C++ 调用 ScaLAPACK 的示例 Makefile,我遇到了困难。

我正确编译了最新版本,并通过了所有测试。我在 Fedora 上使用 GCC 和 OpenMPI 编译它,我还尝试使用存储库中的预构建二进制文件,但没有成功。

0 投票
1 回答
1236 浏览

c - 在 C 中使用 mpi 和 lapack 时出现分段错误

我正在尝试使用 Blac 的 pdgemm 执行矩阵乘法。我正在使用的矩阵乘法的确切子程序可以在这里找到:http: //www.netlib.org/scalapack/html/pblas_qref.html#PvGEMM

但是,我的代码在 pdgemm 调用上返回“无法为线程本地数据分配内存:ABORT”。在我的代码中,我将一个矩阵自身相乘,它是一个方阵,因此得到的矩阵是相同的维度。这是有问题的代码

我对 ScaLapacs 没有太多经验,但是从我看过的示例中,我不确定为什么会出现分段错误,我们将不胜感激。

0 投票
1 回答
2148 浏览

c++ - Cholesky 分解 ScaLapack 错误

我收到以下错误,我不知道为什么。

我知道错误消息的含义,但我尽可能地遵循了网络上可用的过时文档,并尝试从网络上的工作示例代码中拼凑出一个并行的 Cholesky 分解。我不确定我哪里出错了。

有人可以解释我在下面的代码中哪里出错了吗?这是代码功能的概述,我正在使用 4 个处理器进行测试,并将 8x8 矩阵划分为 2 x 2 处理器块网格从文件中加载矩阵,这是一个示例 8 x 8 matrixfile ,

我按照示例将矩阵分配到 4 个单独的 4x4 本地阵列,每个阵列分别位于 4 个节点上。然后我运行并调用产生上述错误descinit_的相关例程。pdpotrf_我不知道我哪里出错了,并尽可能地遵循文档。Fortran 中并行 Cholesky 分解的工作示例也将有很大帮助

函数调用参考

pdpotrf_

descinit_

运行参数

我在每个节点上都打印了上述参数,它们是相同的

0 投票
2 回答
1526 浏览

system - 使用 LAPACK 的 DGBSV 从 C 中求解带状系统

我试图搜索与该主题相关的类似线程,但似乎没有人关心带状系统(...)。

我有兴趣使用 C 代码中的 LAPACK/ScaLAPACK 求解带状矩阵。首先,在尝试使用 ScaLAPACK 之前,我想使用 LAPACK 实现顺序解决方案。

问题:两种语言之间的行主要/列主要差异似乎正在影响我的解决方案过程。这是我打算解决的系统:

线性系统

以下代码将该矩阵转换为 LAPACK 的带状数据结构,在此处指定。

正如我所说,我担心我转换矩阵的方式是不正确的,因为我的解决方案产生了:

Fortran 的返回值info = 1意味着分解已完成,但U(1,1) = 0在 的 LU 分解中A = LU

0 投票
0 回答
308 浏览

c - ScaLAPACK,调用 Cblacs_gridinit() 时“信号量超时期限已过”

我使用来自 Intel MKL 的 ScaLAPACK,并在 Windows 7 计算机网络上安装了 MPICH2。当我在单台机器上运行作业时它工作正常,例如:

此外,当我运行时,它在网络上运行良好cpi.exe(测试程序与 MPICH2 一起提供):

我的代码(大线性方程组的解)在单台机器上也能正常工作。但是,当我这样做时它失败了:

消息是:

据我现在所知,问题出现在我的 C 代码的早期:

我将不胜感激任何帮助或建议。解决这个问题对我来说非常重要。

编辑:下面的代码确实有效,所以我的 MPI 基础设施似乎还可以..?

0 投票
3 回答
571 浏览

c - C/Fortran 混合代码以一种奇怪的方式使用 MPI/ScaLAPACK 段错误

我正在尝试将此代码从 Fortran 翻译成 C。

这是我到目前为止所拥有的:

请原谅注释掉的变量的数量,但就像我说的,我基本上是从头开始翻译参考驱动程序。

我的问题是,当我编写 for 循环时,它突然开始出现段错误……它以前工作过。这是一个时髦的内存操作问题的明显迹象,这可能是由与 C 和 Fortran 之间的内存管理差异相关的问题引起的。

至少,这是我的猜测。

有人知道可能出了什么问题吗?

提前致谢!

0 投票
1 回答
128 浏览

matrix - 报告/可视化 MPI 代码的可伸缩性结果......这将是最好的方法?

作为我研究的一部分,我使用ScaLAPACK. 我有兴趣将实现的加速报告作为矩阵秩r及其带宽b的函数。

这将如何更好地实现?

这是我为这两个值选择的宇宙:

输入_{10,000 25,000 50,000 75,000 100,000 500,000 1,000,000 5,000,000 10,000,000}

{2 4 8 16 32 64 128 256 512 1024}

我使用的集群总共有 64 个核心,所以p{1, ..., 64}.

我已经计算了加速和效率,se,作为p的函数rb的函数。

我的目标是以某种方式显示加速是如何基于rb的加速性能如何。我正在考虑创建(r,b)空间的某种表面投影。但是我怎样才能在一个值中恢复加速的行为呢?

我的一个建议是使用达到的和理想的(线性)加速来计算 Pearson 相关系数,但是,这似乎不起作用,因为它没有考虑到出现的“加速最佳点”的存在r的较小值。

有什么提示吗?

提前致谢!

0 投票
2 回答
510 浏览

fortran - 使用比使用更多的进程调用 BLACS

我想创建一个大量使用 SCALAPACK 的并行程序。SCALAPACK 的基础是 BLACS,它本身依赖 MPI 进行进程间通信。

我想以定义数量的进程(例如机器上的内核数)启动程序,并让算法决定如何使用这些进程进行计算。

作为测试用例,我想使用 10 个进程。其中 9 个进程应排列成网格 ( BLACS_GRIDINIT),第 10 个进程应等到其他进程完成。

不幸的是,OpenMPI 崩溃是因为最后一个进程没有从 BLACS 进入 MPI 上下文,而其他进程却进入了。

问题:使用 BLACS 处理比需要的更多的正确方法是什么?

我做了一些额外的MPI_INITMPI_FINALIZE调用的实验,但我的尝试都没有成功。


我从 Intel MKL 的示例代码开始(稍微缩短了一点):


更新:我调查了源代码,BLACS看看那里发生了什么。

如果以前没有发生这种情况,该调用BLACS_PINFO会使用 初始化 MPI 上下文。MPI_INIT这意味着,在这一点上,一切都按预期工作。

最后,调用BLACS_EXIT(0)应该释放所有资源BLACS,如果参数是0,它也应该调用MPI_FINALIZE。不幸的是,这没有按预期工作,我的最后一个过程没有调用MPI_FINALIZE.

作为一种解决方法,如有必要,可以询问MPI_FINALIZED并致电。MPI_FINALIZE

更新 2:我之前的尝试是使用Intel Studio 2013.0.079OpenMPI 1.6.2on完成的SUSE Linux Enterprise Server 11

在阅读了cteo的回答后,我尝试使用Ubuntu 12.04gfortran 4.6.3, OpenMPI 1.4.3, BLACS 1.1)给出的工具编译这个例子并且成功了。

我的结论是,英特尔的实施似乎有问题。我将在不久的将来使用 的最新服务版本重试此示例Intel Studio,但不要期望任何更改。

但是,我将不胜感激任何其他(也许更好)的解决方案。

0 投票
1 回答
2132 浏览

c - scalapack 矩阵对角化 (pdsyevd)

我正在使用 C 中的 ScaLAPACK 的分而治之算法PDSYEVD编写一个用于并行矩阵对角化的小型测试代码。但是我是 ScaLAPACK 的新手,并且查看源代码似乎需要设置的变量数量相当可怕,但我无法找到好的任何例子。我需要对角化的矩阵类型是真实的、对称的、相当稀疏的,并且大小约为 1000x1000。

一个简单的(串行)基于 LAPACK 的代码如下所示:

从那里我想去 pdsyevd,它应该被称为:

很多事情我都不清楚。对这些问题中的任何一个或几个问题的答案将不胜感激。

  1. 有没有人碰巧有一个例子?
  2. 在 ScaLAPACK 文档中它说:“[...] PDSYEVD 假设同质系统 [...] 异构系统可能会返回不正确的结果而没有任何错误消息。”。在这种情况下,“同质/异质”系统是什么意思?
  3. 在文档的末尾它说:“分布式子矩阵必须验证一些对齐属性,即 [...]”。这个表达式中的术语甚至不在输入中,我怎么知道这是否满足?MB_A/MB_Z?
  4. 如何为每个流程选择子矩阵?有什么道理吗?我想它们的大小应该或多或少相等,但是行/列/正方形/...?对于更稀疏的区域可能更大......?
  5. Z/IZ/IJ/DESCZ 在输入中做了什么?我已经为每个进程提供了一个子矩阵 A/IA/JA/DESCA 来处理,那么为什么是这个 Z?它似乎是部分特征向量矩阵,但为什么不像 DSYEV 中那样写入 A?
  6. 所有进程都必须具有相同的块大小吗?子矩阵是否可以重叠,或者我对素数大小的矩阵该怎么做?
  7. DESCA中有什么?另外,什么是DLEN?它似乎是 A 的输入“数组描述符”。我不知道该怎么做。

到目前为止,或多或少是我所拥有的,并没有做太多: