MPI和OpenMP。我还有选择吗?

MPI和OpenMP。我还有选择吗?,mpi,openmp,linear-algebra,lapack,intel-fortran,Mpi,Openmp,Linear Algebra,Lapack,Intel Fortran,我有一个线性代数代码,我正试图运行得更快。它是一种迭代算法,循环和矩阵向量乘法在in内。 到目前为止,我已经使用MATMUL(Fortran Lib.)和DGEMV,尝试用OpenMP编写我自己的MV代码,但该算法在可伸缩性方面没有做得更好。无论我分配给它多少个处理器(我已经试过64个处理器),它的速度都只有3.5-4。 分析表明,在矩阵向量中花费了大量的时间,其余的时间则相当正常。 我的问题是: 我有一个共享内存系统,有大量的RAM和处理器。我尝试过调整OpenMP代码的实现(包括矩阵向量),

我有一个线性代数代码,我正试图运行得更快。它是一种迭代算法,循环和矩阵向量乘法在in内。 到目前为止,我已经使用MATMUL(Fortran Lib.)和DGEMV,尝试用OpenMP编写我自己的MV代码,但该算法在可伸缩性方面没有做得更好。无论我分配给它多少个处理器(我已经试过64个处理器),它的速度都只有3.5-4。 分析表明,在矩阵向量中花费了大量的时间,其余的时间则相当正常。 我的问题是: 我有一个共享内存系统,有大量的RAM和处理器。我尝试过调整OpenMP代码的实现(包括矩阵向量),但并没有帮助。用MPI编码会有帮助吗?我不是MPI的专业人士,但微调消息通信的能力可能会有所帮助,但我不能确定。有什么评论吗


更一般地说,从我所阅读的文献来看,MPI=分布式,OpenMP=共享,但它们能否在其他领域表现良好?像共享中的MPI?行吗?如果做得好,它会比OpenMP实现更好吗?

您可以在共享环境中使用MPI(尽管在分布式环境中不是OpenMP)。然而,实现良好的加速比更多地取决于算法和数据依赖性,而不是所使用的技术。由于您拥有大量共享内存,我建议您坚持使用OpenMP,并仔细检查您是否充分利用了资源。

您可以在共享环境中使用MPI(但在分布式环境中不能使用OpenMP)。然而,实现良好的加速比更多地取决于算法和数据依赖性,而不是所使用的技术。由于您拥有大量共享内存,我建议您坚持使用OpenMP,并仔细检查您是否充分利用了资源。

您最好使用线性代数软件包,该软件包已经针对多核环境进行了优化,并将其用于矩阵向量乘法。该软件包(如果您有nehalem或更老的;很遗憾,它不再更新)或供应商BLAS实现(如英特尔CPU、AMD或苹果的BLAS实现,所有这些都需要成本),都有良好的、经过良好调优的多线程BLAS实现。除非你有充分的理由相信你能比那些全职开发团队做得更好,否则你最好使用他们


请注意,您永远不会像使用DGEMM那样使用DGEMV获得并行加速比,因为向量比另一个矩阵小,因此工作量更少;但你仍然可以做得很好,您会发现,使用这些库比使用任何手动操作都要获得更好的性能,除非您已经在执行多级缓存阻塞。

您最好使用线性代数包,该包已经针对多核环境进行了优化,并将其用于矩阵向量乘法。该软件包(如果您有nehalem或更老的;很遗憾,它不再更新)或供应商BLAS实现(如英特尔CPU、AMD或苹果的BLAS实现,所有这些都需要成本),都有良好的、经过良好调优的多线程BLAS实现。除非你有充分的理由相信你能比那些全职开发团队做得更好,否则你最好使用他们


请注意,您永远不会像使用DGEMM那样使用DGEMV获得并行加速比,因为向量比另一个矩阵小,因此工作量更少;但是您仍然可以做得很好,并且您会发现使用这些库比使用任何手动操作都要获得更好的性能,除非您已经在执行多级缓存阻塞。

您是否使用多线程MKL(使用Composer XE,添加-MKL=parallel?)多线程与单线程的加速比是多少,你为什么担心这还不够?使用多线程库不必重写任何代码。我的编译标志是:export MKL_NUM_THREADS=4 ifort-fp model source code.f90-L$MKLROOT/lib/ia32-lmkl_blas95-lmkl_intel-lmkl_intel_thread-lmkl_core-openmp-lpthread&&time./a.out我使用VTune进行评测您使用多线程MKL吗(使用Composer XE,添加-mkl=parallel?)多线程与单线程的加速比是多少?您为什么担心这还不够?您不必重写任何代码来使用多线程库。我的编译标志是:export MKL_NUM_THREADS=4 ifort-fp model source code.f90-L$MKLROOT/lib/ia32-lmkl_blas95-lmkl_intel-lmkl_intel_thread-lmkl_core-openmp-lpthread&&time./a.out我使用VTune进行评测