【问题标题】:Parallel linear algebra for multicore system [closed]多核系统的并行线性代数
【发布时间】:2012-04-19 00:45:24
【问题描述】:

我正在开发一个需要进行大量线性代数计算的程序。

现在我正在使用 LAPACK/BLAS 例程,但我需要利用我的机器(24 核 Xeon X5690)。

我发现了像 pblasscalapack 这样的项目,但它们似乎都专注于分布式计算和使用 MPI。

我没有可用的集群,所有计算都将在单个服务器上完成,使用 MPI 看起来有点矫枉过正。

有人对此有什么建议吗?

【问题讨论】:

  • 不要放弃使用 MPI,尤其是当您可以找到支持 MPI 的库来完成繁重的工作时。这可能比查找共享内存线性代数库或编写自己的共享内存代码更容易。一个好的 MPI 实现将在共享内存计算机上高效运行。
  • 我知道。我并不是说我会自己编写 MPI 代码。我只是想避免所有使用 MPI 的东西,因为这不是一个集群程序,我想避免任何不必要的开销
  • 投票结束作为工具记录/太宽泛。

标签: parallel-processing linear-algebra lapack


【解决方案1】:

正如@larsmans(例如 MKL)所提到的,您仍然使用 LAPACK + BLAS 接口,但您只需为您的平台找到一个经过调整的多线程版本。 MKL很棒,但价格昂贵。其他开源选项包括:

  • OpenBLAS / GotoBLAS,Nehalem 支持应该可以正常工作,但还没有对 westmere 的调整支持。多线程处理得很好。
  • Atlas :在安装时自动调整到您的架构。对于“典型”矩阵(例如,方形 SGEMM)可能较慢,但对于奇数情况可能会更快,对于 westmere 甚至可能击败 OpenBLAS/GotoBLAS,我自己还没有测试过。主要针对串行情况进行了优化,但确实包含并行多线程例程。
  • Plasma - 专为多核设计的 LAPACK 实现。

我也同意马克的评论;根据您使用的 LAPACK 例程,使用 MPI 的分布式内存实际上可能比多线程更快。 BLAS 例程不太可能出现这种情况,但对于更复杂的事情(比如 LAPACK 中的特征值/向量例程),值得测试。虽然 MPI 函数调用确实是一种开销,但在分布式内存模式下执行操作意味着您不必担心错误共享、同步访问共享变量等问题。

【讨论】:

  • 我正在使用 dlamch、dstebz、dstein、dlamch 和 dstebz
  • 也许 pdstebz 和 pdstein 是我正在寻找的功能,但它们有不同的界面。那些 lwork、liwork 和正交化参数是什么?在调用 dstebz 和 dstein 时利用多核的最佳方法是什么?
  • 我认为第一件事就是尝试使用多线程 blas/lapack 安装 - 比如 openblas 或 gotoblas。开始使用 scalapack 需要做一些事情,因为内核之间的矩阵分布并不明显。好消息是,一旦你遇到了使用 scalapack 的麻烦,它甚至可以跨节点工作。我在这里举了一个使用 scalapack 的例子:scicomp.stackexchange.com/questions/1688/…
  • 所以我只需要构建openblas,链接它就可以并行计算特征值/特征向量?
  • 如果您使用多核 BLAS 或 LAPACK 包之一,您将在它们支持多线程的任何例程中获得多线程。如果你只是拿一个普通的 lapack 并使用一个线程化的 blas,lapack 例程将调用线程化的 blas 例程,这会给你一些速度,这取决于在 lapack 中完成了多少工作,以及在 blas 调用中完成了多少.如果这对您来说足够改进,那么您就完成了;否则,您可能必须转向明确并行的 lapack,例如 scalapack。
【解决方案2】:

考虑使用Intel MKLOpenBLAS 也可以很快,虽然我还没有在 > 四核机器上运行它。

【讨论】:

  • 好调用,但是怎么用呢?文档显示函数与 LAPACK 中的函数名称相同。我是否只需要链接 mkl 而不是 lapack blas 和 gfortran? (我当前的 ldflags 是 -llapack -lblas -lgfortran)。基本上我需要并行替换 DSEBZ 和 DSTEIN
  • @Patrik:MKL 被设计为与 BLAS 兼容,因此只需重新编译和链接 应该 工作。我必须承认我从不直接从 C 中使用它,而是总是通过 Numpy。
  • 从 Fortran 中,正如@larsmans 猜测的那样,它是链接(右)库的简单操作。如果您遇到问题,请查看英特尔链接线顾问:software.intel.com/en-us/articles/intel-mkl-link-line-advisor
  • 如果您使用 C,lapacke 接口(最初在 MKL 中,现在在 lapack 中是标准的)是使用 lapack 的一种非常好的方式。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多