多核系统的并行线性代数



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

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

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

我没有可用的集群,所有的计算都将在一台服务器上完成,使用MPI看起来有些过头了。

有人对此有什么建议吗?

正如@larsmans(比如MKL)所提到的,您仍然使用LAPACK+BLAS接口,但您只是找到了一个适合您的平台的调优多线程版本。MKL很棒,但很贵。其他开源选项包括:

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

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

请考虑使用"英特尔MKL"。OpenBLAS也可以很快,尽管我还没有在>四核机器上运行它。

最新更新