问题标签 [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.
c++ - 转换 gsl 线性代数以用于 scalapack 或其他并行矩阵库
我有一个深度嵌入 GNU 科学库 (GSL) 矩阵算术的代码,该代码的主要计算是求解一个大型线性方程组,该方程组需要很长时间串行和 GSL 和 BLAS 函数,有没有办法并行化此计算或将其转换为在 ScaLAPACK 等已经并行的库中使用?
c++ - 从 C++ 调用 ScaLAPACK
嗨,任何人都可以为我提供一个从 C++ 调用 ScaLAPACK 的示例 Makefile,我遇到了困难。
我正确编译了最新版本,并通过了所有测试。我在 Fedora 上使用 GCC 和 OpenMPI 编译它,我还尝试使用存储库中的预构建二进制文件,但没有成功。
c - 在 C 中使用 mpi 和 lapack 时出现分段错误
我正在尝试使用 Blac 的 pdgemm 执行矩阵乘法。我正在使用的矩阵乘法的确切子程序可以在这里找到:http: //www.netlib.org/scalapack/html/pblas_qref.html#PvGEMM
但是,我的代码在 pdgemm 调用上返回“无法为线程本地数据分配内存:ABORT”。在我的代码中,我将一个矩阵自身相乘,它是一个方阵,因此得到的矩阵是相同的维度。这是有问题的代码
我对 ScaLapacs 没有太多经验,但是从我看过的示例中,我不确定为什么会出现分段错误,我们将不胜感激。
c++ - Cholesky 分解 ScaLapack 错误
我收到以下错误,我不知道为什么。
我知道错误消息的含义,但我尽可能地遵循了网络上可用的过时文档,并尝试从网络上的工作示例代码中拼凑出一个并行的 Cholesky 分解。我不确定我哪里出错了。
有人可以解释我在下面的代码中哪里出错了吗?这是代码功能的概述,我正在使用 4 个处理器进行测试,并将 8x8 矩阵划分为 2 x 2 处理器块网格从文件中加载矩阵,这是一个示例 8 x 8 matrixfile ,
我按照示例将矩阵分配到 4 个单独的 4x4 本地阵列,每个阵列分别位于 4 个节点上。然后我运行并调用产生上述错误descinit_
的相关例程。pdpotrf_
我不知道我哪里出错了,并尽可能地遵循文档。Fortran 中并行 Cholesky 分解的工作示例也将有很大帮助
函数调用参考
运行参数
我在每个节点上都打印了上述参数,它们是相同的
system - 使用 LAPACK 的 DGBSV 从 C 中求解带状系统
我试图搜索与该主题相关的类似线程,但似乎没有人关心带状系统(...)。
我有兴趣使用 C 代码中的 LAPACK/ScaLAPACK 求解带状矩阵。首先,在尝试使用 ScaLAPACK 之前,我想使用 LAPACK 实现顺序解决方案。
问题:两种语言之间的行主要/列主要差异似乎正在影响我的解决方案过程。这是我打算解决的系统:
以下代码将该矩阵转换为 LAPACK 的带状数据结构,在此处指定。
正如我所说,我担心我转换矩阵的方式是不正确的,因为我的解决方案产生了:
Fortran 的返回值info = 1
意味着分解已完成,但U(1,1) = 0
在 的 LU 分解中A = LU
。
c - ScaLAPACK,调用 Cblacs_gridinit() 时“信号量超时期限已过”
我使用来自 Intel MKL 的 ScaLAPACK,并在 Windows 7 计算机网络上安装了 MPICH2。当我在单台机器上运行作业时它工作正常,例如:
此外,当我运行时,它在网络上运行良好cpi.exe
(测试程序与 MPICH2 一起提供):
我的代码(大线性方程组的解)在单台机器上也能正常工作。但是,当我这样做时它失败了:
消息是:
据我现在所知,问题出现在我的 C 代码的早期:
我将不胜感激任何帮助或建议。解决这个问题对我来说非常重要。
编辑:下面的代码确实有效,所以我的 MPI 基础设施似乎还可以..?
c - C/Fortran 混合代码以一种奇怪的方式使用 MPI/ScaLAPACK 段错误
我正在尝试将此代码从 Fortran 翻译成 C。
这是我到目前为止所拥有的:
请原谅注释掉的变量的数量,但就像我说的,我基本上是从头开始翻译参考驱动程序。
我的问题是,当我编写 for 循环时,它突然开始出现段错误……它以前工作过。这是一个时髦的内存操作问题的明显迹象,这可能是由与 C 和 Fortran 之间的内存管理差异相关的问题引起的。
至少,这是我的猜测。
有人知道可能出了什么问题吗?
提前致谢!
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}
.
我已经计算了加速和效率,s和e,作为p的函数,r和b的函数。
我的目标是以某种方式显示加速是如何基于r和b的加速性能如何。我正在考虑创建(r,b)空间的某种表面投影。但是我怎样才能在一个值中恢复加速的行为呢?
我的一个建议是使用达到的和理想的(线性)加速来计算 Pearson 相关系数,但是,这似乎不起作用,因为它没有考虑到出现的“加速最佳点”的存在r的较小值。
有什么提示吗?
提前致谢!
fortran - 使用比使用更多的进程调用 BLACS
我想创建一个大量使用 SCALAPACK 的并行程序。SCALAPACK 的基础是 BLACS,它本身依赖 MPI 进行进程间通信。
我想以定义数量的进程(例如机器上的内核数)启动程序,并让算法决定如何使用这些进程进行计算。
作为测试用例,我想使用 10 个进程。其中 9 个进程应排列成网格 ( BLACS_GRIDINIT
),第 10 个进程应等到其他进程完成。
不幸的是,OpenMPI 崩溃是因为最后一个进程没有从 BLACS 进入 MPI 上下文,而其他进程却进入了。
问题:使用 BLACS 处理比需要的更多的正确方法是什么?
我做了一些额外的MPI_INIT
和MPI_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.079
和OpenMPI 1.6.2
on完成的SUSE Linux Enterprise Server 11
。
在阅读了cteo的回答后,我尝试使用Ubuntu 12.04
(gfortran 4.6.3, OpenMPI 1.4.3, BLACS 1.1
)给出的工具编译这个例子并且成功了。
我的结论是,英特尔的实施似乎有问题。我将在不久的将来使用 的最新服务版本重试此示例Intel Studio
,但不要期望任何更改。
但是,我将不胜感激任何其他(也许更好)的解决方案。
c - scalapack 矩阵对角化 (pdsyevd)
我正在使用 C 中的 ScaLAPACK 的分而治之算法PDSYEVD编写一个用于并行矩阵对角化的小型测试代码。但是我是 ScaLAPACK 的新手,并且查看源代码似乎需要设置的变量数量相当可怕,但我无法找到好的任何例子。我需要对角化的矩阵类型是真实的、对称的、相当稀疏的,并且大小约为 1000x1000。
一个简单的(串行)基于 LAPACK 的代码如下所示:
从那里我想去 pdsyevd,它应该被称为:
很多事情我都不清楚。对这些问题中的任何一个或几个问题的答案将不胜感激。
- 有没有人碰巧有一个例子?
- 在 ScaLAPACK 文档中它说:“[...] PDSYEVD 假设同质系统 [...] 异构系统可能会返回不正确的结果而没有任何错误消息。”。在这种情况下,“同质/异质”系统是什么意思?
- 在文档的末尾它说:“分布式子矩阵必须验证一些对齐属性,即 [...]”。这个表达式中的术语甚至不在输入中,我怎么知道这是否满足?MB_A/MB_Z?
- 如何为每个流程选择子矩阵?有什么道理吗?我想它们的大小应该或多或少相等,但是行/列/正方形/...?对于更稀疏的区域可能更大......?
- Z/IZ/IJ/DESCZ 在输入中做了什么?我已经为每个进程提供了一个子矩阵 A/IA/JA/DESCA 来处理,那么为什么是这个 Z?它似乎是部分特征向量矩阵,但为什么不像 DSYEV 中那样写入 A?
- 所有进程都必须具有相同的块大小吗?子矩阵是否可以重叠,或者我对素数大小的矩阵该怎么做?
- DESCA中有什么?另外,什么是DLEN?它似乎是 A 的输入“数组描述符”。我不知道该怎么做。
到目前为止,或多或少是我所拥有的,并没有做太多: