多核系统的并行线性代数

Pat*_*rik 10 parallel-processing linear-algebra lapack

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

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

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

我没有可用的集群,所有计算都将在一台服务器上完成,并且使用MPI看起来像是一种过度杀伤力.

有人对此有任何建议吗?

Jon*_*rsi 10

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

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

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


Fre*_*Foo 2

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

  • 正如 @larsmans 猜测的那样,在 Fortran 中,这是一个链接(右)库的简单操作。如果您遇到问题,请查看英特尔链接线顾问:http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ (2认同)