使用mpic程序中的ScaLAPACK例程

使用mpic程序中的ScaLAPACK例程,mpi,Mpi,我目前有一个用C编写的MPI程序,我想使用ScaLAPACK中的例程。 我正在研究LDA的并行版本,其中一个步骤是反转矩阵。 我在ScaLAPACK中找到了一个例程来解决这个pdgetri.f(它是用fortran编写的,我不确定是否存在c例程),但我不确定如何配置它来工作。我正在使用Windows和Intel双核笔记本电脑。其目的比性能更具教育意义。SCALAPACK依赖于为正在使用的任何消息传递系统提供抽象。如果在代码中建立了现有MPI通信器,则可以使用初始化映射到通信器上的BLACS上下文

我目前有一个用C编写的MPI程序,我想使用ScaLAPACK中的例程。 我正在研究LDA的并行版本,其中一个步骤是反转矩阵。 我在ScaLAPACK中找到了一个例程来解决这个pdgetri.f(它是用fortran编写的,我不确定是否存在c例程),但我不确定如何配置它来工作。我正在使用Windows和Intel双核笔记本电脑。其目的比性能更具教育意义。

SCALAPACK依赖于为正在使用的任何消息传递系统提供抽象。如果在代码中建立了现有MPI通信器,则可以使用初始化映射到通信器上的BLACS上下文。然后,可以使用该上下文创建SCALAPACK分布式阵列,然后将这些阵列传递给将对其进行操作的SCALAPACK例程


如何处理C-Fortran接口问题在很大程度上取决于您使用的编译器。如果您有一个支持Fortran 2003特性的“现代”编译器,那么可以使用C互操作性语言特性为您需要的函数编写接口包装器,然后直接调用它们。在UNIX/LINUX风格的系统上,F2C风格的接口是从C调用Fortran的实际方式,尽管有些细节通常是特定于编译器的。我根本不使用Windows,所以如果您不能使用Fortran 2003互操作性,我真的可以帮助您。

非常感谢您的回答。我知道关键是C和Fortran之间的互操作。我会努力的。我会在一秒钟内切换到Linux,但一想到在那里配置MPI,我就感到恐惧:)@talonmes:看来你一直都知道scalapack,两天前就可以告诉我了。。。但是,除了每次都重新发明Fortran/C接口之外,我们还可以使用一些标准的C包装器吗?@HughPerkins:真的吗?你问了一个难以置信的一般性的,关于C++和MPI的快速Cholesky分解问题,这是一个非常不现实的性能目标,现在你想责备我,因为没有提供一个非常便携的通用库,而不是非常有效率的FORTRAN库?祝你好运……@Talonmes:你说scalapack的性能不是很好。你知道有更好的库可以用于C和MPI吗?@HughPerkins:把这句话放在一个小的Cholesky分解的上下文中,这就是你真正想问的。大多数并行分布式Cholesky码都是右视的,触发器是分布式对称秩k更新的,位于其底部的是gemm。所以从一开始就开始:去寻找一个架构上最优的gemm并对其进行基准测试(包括大小和核心)。使用这些结果确定pdsyrk的最佳结构。基准是这样的。这是Cholesky分解的性能上限。