12

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

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

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

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

有人对此有什么建议吗?

4

2 回答 2

10

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

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

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

于 2012-04-05T12:54:15.213 回答
2

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

于 2012-04-05T09:19:04.770 回答