问题标签 [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 投票
1 回答
122 浏览

c - Scalapack 返回错误的答案

我正在尝试使用 scalapack 中的 pzheevd 例程编写一些 c 代码来查找大型矩阵的所有特征值。我有以下简单示例,它硬编码了一个简单的 4x4 矩阵。使用单个进程、2 个进程或 4 个进程,我得到正确的特征值(-2.0396、-2、2、2.0396)。但是,使用不相称的数字(如 3)返回的特征值是不正确的,即使看起来所有矩阵元素都已正确分配。

要构建代码,请使用:

有效的例子:

而一个没有:

和代码:

0 投票
0 回答
153 浏览

geometry - LAPACK:求解大型周期性带状方程组

对于一般平均曲率流问题,我必须在每个时间步求解大量联立方程(约 1000 秒)。该问题是在封闭流形上定义的,因此边界条件是周期性的。

我现在正在使用连续过度松弛算法来解决这个问题,但速度很慢。我试过dgbtrf -> dgbtrs(没有周期性条件),而且速度相当快。

系数矩阵如下所示

我需要解决五对角系统,它们不是对称的并且不知道是正定的。

有没有办法解决 LAPACK 中的循环/周期带状系统?

还是我必须使用通用求解器,例如dgetrs

0 投票
1 回答
1280 浏览

python - python ctypes链接多个共享库与示例gsl gslcblas

我想在 python 中使用共享库中的一些函数。从 python 文档中,我知道 ctypes 是一个不错的选择。但是这样的库有一些未定义的符号,我应该将它链接到另一个共享库以获取符号。

在 g++ 中,很简单:g++ main.cpp -la -lb。我需要的函数在 liba.so 中,而 liba.so 有一些未定义的函数,可以在 libb.so 中解决。

但是如何在 ctypes 中做到这一点?ctypes.cdll.LoadLibrary('liba.so') 说有一些未定义的符号,如何告诉ctypes找到libb.so?因为 ldd liba.so 没有显示到 libb.so 的链接。

示例:我想在 gsl 中使用一些函数。在 g++ 中:

并且 ldd libgsl.so 没有显示到 libgslcblas 的链接

在蟒蛇中:

如何告诉 ctypes 找到 libgslcblas?

如果我使用 scalapack,也会发生同样的问题。我使用 ubuntu 16.04

0 投票
0 回答
139 浏览

matrix-multiplication - 高效的复杂矩阵-矩阵乘法:矩阵形状和记忆

在我的代码中,最深的循环级别包含一个用于矩阵矩阵乘法的 BLAS 例程。由于此操作是最昂贵的操作(关于计算时间),我想知道使矩阵矩阵乘法与复杂矩阵元素尽可能快地相乘的重要性是什么?

我将 Fortran 与 ScaLAPACK 一起使用。我将使用 CGEMM 例程。

我有以下具体问题:

  • 矩阵如何存储在内存中重要吗?目前,我使用一个三维数组,其中一个索引在每个循环周期中固定,以便三维数组简化为二维矩阵。但我觉得这是低效的,因为从那时起矩阵元素在内存中并没有物理上靠近在一起。那么,将我的矩阵元素复制到一个临时二维数组中以将其传递给 CGEMM 是否更好?
  • 在 Fortran 中,第一个数组索引是最快的索引。为了实现快速矩阵乘法,是否有一种最佳方式应该如何塑造数组(矩阵)?例如,我必须执行矩阵乘法 A*B,其中 A 是一个复杂的 200x4000 矩阵,B 是一个复杂的 4000x50 矩阵。那么我是否应该更好地将 A 创建为 4000x200 数组,因为那时“大”索引是 fastes 索引?当然,我必须告诉 CGEMM 需要转置 A 才能获得正确的结果。
  • 在取消矩阵矩阵乘法的 BLAS 例程中是否有任何众所周知的陷阱?我知道这是一个非常普遍的问题,但也许有人知道一个很好的文档,其中总结了一些 DO 和 DONT。
0 投票
1 回答
101 浏览

c++ - Blacs:不使用所有 MPI 内核的处理器网格

当处理器网格不使用所有可用的 MPI 内核时,我遇到了 Scalapack 的问题。说我知道要设置的网格Pc*Pr<=NP

当我设置流程网格时

Cblacs_gridinfo将输入网格大小从2x更改2-1x -1。在这种情况下,我正在使用11MPI 内核进行测试。

这本身不会引发任何错误,但是当我尝试设置描述符向量时

在带有 id 的进程上4-10我得到错误

问题:

处理不在网格上的 MPI 内核的正确方法是什么?我应该跳过所有核心上的所有内容吗

回来了myrow=mycol=-1?这是 API 的一部分吗?

0 投票
2 回答
245 浏览

mpi - 细分 Scalapack 网格

我正在尝试使用 Scalapack 计算许多大型矩阵的特征谱,而不是将每个矩阵分布在所有 32 个进程中。我宁愿将每个矩阵分布在 4 个进程中并并行计算 8 个矩阵。我知道如何使用 MPI_Comm_split 细分 MPI 网格,但我似乎 Scalapack 不采用自定义通信器。相反,它似乎使用了植根于 PVM 的 BLACS 网格。

如何在 Scalapack 中实现这个细分?

0 投票
2 回答
456 浏览

cython - 在 cython 中包装 ScaLAPACK 函数

我使用lapackblas库来实现矩阵求逆和矩阵乘法cython。这是我的代码:

我想通过拆分计算并在多个处理器上运行它们来提高我的代码速度。如何通过在我的代码中包装以下函数来扩展此代码并使用scalapackcython库:

  1. pdgetri使用 LU 分解计算分布矩阵的逆。
  2. pdgetrf计算通用 M×N 分布矩阵的 LU 分解,使用部分旋转和行交换。
  3. pdtran_转置矩阵。
  4. pdgemm_执行矩阵-矩阵乘法之一。

更新一: 为了能够使用pdgetri或者pdgetrf我应该使用以下方法将它们从他们的fortran脚本和cpdgemm_脚本中包装起来?

scalapack_wrap.f90

scalapack_func.h

scalapack_funcs.pyx

更新二:

安装程序.py

代码被编译但是

正如danny指出的那样,问题可能只是使用scalapack库正确编译代码。但我仍然收到上述错误消息。任何建议如何摆脱它?

0 投票
0 回答
472 浏览

matrix - 使用mpi在fortran中具有单位矩阵的Kronecker张量积

我需要取两个矩阵的 Kronecker 乘积,其中一个是单位矩阵,我的系统大小恰好是两个矩阵的 256*256 的数量级。尽管我编写了一个运行良好的代码,但问题在于系统大小。仅仅拿走产品就需要很多时间。我尝试开发 MPI 代码,但在将数据从一个内核发送和接收到另一个内核时遇到了问题。我不知道 MPI 的哪个例程对这项任务有效,如果有一些库使用 mpi 来评估张量积,如果有人可以帮助处理 mpi 张量积代码,那将会很有帮助。

0 投票
1 回答
150 浏览

makefile - “ld:找不到 -lblacsF77init 的库”

我正在尝试在我的 macbook 上使用 mpi 编译我的代码,但出现以下错误:“ld: library not found for -lblacsF77init”。我不明白在哪里可以找到这个库以及如何创建正确的路径。

这是makefile:#串行Fortran编译程序

非常感谢您提供的任何帮助。

0 投票
0 回答
105 浏览

gcc - ScaLapack 在 Centos7 上的自动安装程序包安装失败,但在 Centos 6.7 上成功。为什么?

我正在尝试在 CentOS 7(64 位)上http://www.netlib.org/scalapack/scalapack_installer.tgz上的基于 Python 的安装程序的帮助下安装 ScaLAPACK。它安装成功,但在测试例程步骤中失败并显示错误。如何解决?

用于编译的命令如下:

过程描述如下