【问题标题】:Libraries for parallel distributed cholesky decomposition in c/c++ in mpi environment?mpi环境中c/c++中并行分布式cholesky分解的库?
【发布时间】:2016-12-23 21:15:00
【问题描述】:

mpi 环境下 C/C++ 中密集矩阵的并行分布式 Cholesky 分解有哪些库可用?

我找到了 ScaLAPACK 库,这可能是我正在寻找的解决方案。不过,调用起来似乎有点繁琐,很多 Fortran C 转换要做,这让我觉得它可能没有被广泛使用,因此也许有一些其他的库被用来代替?

或者,当一个人已经在使用 MPI 并且 MPI 已经在程序中初始化时,是否有一些 ScaLAPACK 包装器使得在 C 或 C++ 环境中使用起来相对不太痛苦?

【问题讨论】:

  • Scalapack 是在分布式内存环境中使用分布式计算的方式。如果您可以将矩阵保存在一个主机上并且您不使用分布式矩阵计算,那么带有 openmp 的 lapack 可能是另一种可能性(例如,您需要 N 个 cholesky decomps,它可以分布在 N 台机器上,这样每台机器都可以使用 openmp 进行 cholesky在它的 m 个处理器上)。并且内存对齐摆弄并不是那么糟糕。我写了一些预处理指令,它们在参数中进行了适当的替换。
  • 嗨,博尔特。好的听起来不错。所以,Scalapack,因为我一次只有一个矩阵,不能做任务级并行。 scalapack 能够为 Cholesky 提供什么样的可扩展性? 12核? 48核? 480核?我想这在某种程度上取决于矩阵的大小?
  • 在可扩展性方面,除了矩阵大小之外,还有更多因素,例如节点间连接性、cpu 缓存大小、网络同质性、网络架构等...如果您可以访问大型集群并且需要那么多核心,我会与系统管理员交谈并检查他们的测试类型已经执行或让他们执行 scalapack 测试例程以获得想法。
  • 我建议阅读pdpbtrf.f的标题,了解scalapack中cholesky分解的详细信息和限制。
  • @Bort,好的,谢谢。凉爽的!问题:人们通常如何处理从 C 和/或 C++ 与 fortran 的对话?

标签: c++ c parallel-processing mpi matrix-decomposition


【解决方案1】:

这些是密集矩阵还是稀疏矩阵?

Trilinos 是一个用于并行科学计算的大型库。子包Amesos 可以链接到Scalapack 用于密集系统的并行、直接解决方案,也可以链接到UMFPACKSuperLUMUMPS 用于稀疏系统。 Trilinos 主要是用 C++ 编写的,但如果你喜欢的话,还有 Python 绑定。这可能是矫枉过正,但它会完成工作。

【讨论】:

  • 啊,很好的信息,谢谢!你是对的,我应该指定稀疏或密集。我已经更新了原始问题,说我的矩阵很密集。
  • 是的,我倾向于忘记稀疏矩阵,因为我整天都在处理密集矩阵。 korrok 提到的那些库表现非常好,当然也应该提到。
【解决方案2】:

Intel MKL 也可能是一个选择,因为它在内部调用 ScaLAPACK。请注意,英特尔支持学生使用此库,但在这种情况下,您必须使用开源 MPI 版本。英特尔论坛也很有帮助。


Elemental 也是一个选项,用 C++ 编写,当你想与你的 C/C++ 应用程序和项目负责人集成时,这肯定是一个很大的优势,Jack Poulson 非常友好并且提供了很多帮助。


OpenBLASSuperLUPETSc 也很有趣,您可能想在我的answer 中阅读更多内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2011-10-30
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2015-07-21
    • 2013-02-12
    • 2013-11-01
    相关资源
    最近更新 更多