我正在开发一个需要进行大量线性代数计算的程序。
目前我正在使用 LAPACK/BLAS 程序,但我需要充分利用我的机器(24核 Xeon X5690)。
我已经找到了像pblas和scalapack这样的项目,但它们似乎都专注于分布式计算和使用MPI。
我没有可用的集群,所有计算将在单个服务器上完成,并且使用MPI看起来有些过度。
有人有什么建议吗?
我正在开发一个需要进行大量线性代数计算的程序。
目前我正在使用 LAPACK/BLAS 程序,但我需要充分利用我的机器(24核 Xeon X5690)。
我已经找到了像pblas和scalapack这样的项目,但它们似乎都专注于分布式计算和使用MPI。
我没有可用的集群,所有计算将在单个服务器上完成,并且使用MPI看起来有些过度。
有人有什么建议吗?
如@larsmans所述(例如,使用MKL),您仍然使用LAPACK + BLAS接口,但是您只需要为平台找到一个经过调整和多线程处理的版本即可。MKL非常好,但昂贵。其他开源选择包括:
我还同意Mark的评论;根据您使用的LAPACK例程,MPI的分布式内存处理实际上可能比多线程更快。对于BLAS例程这不太可能是个问题,但对于更复杂的东西(例如LAPACK中的特征值/向量例程),测试一下是值得的。虽然MPI函数调用是开销,但以分布式内存模式进行操作意味着您不必过多担心假共享、同步访问共享变量等问题。