Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fortran中的MPI_BCAST在新群集上不工作_Fortran_Mpi - Fatal编程技术网

fortran中的MPI_BCAST在新群集上不工作

fortran中的MPI_BCAST在新群集上不工作,fortran,mpi,Fortran,Mpi,我有一个工作代码,一年多前我一直在一个旧集群上使用。今年,我想再次使用这段代码,但是,集群是不同的,结果变得毫无意义。我知道这个集群的具体情况,但是很难从那个旧集群中找到那些 我已经能够将问题缩小到MPI\u BCAST调用: if (rang.eq.0) print*, "psi for rang0 = ", psi CALL MPI_BCAST (psi, NSITES, MPI_DOUBLE_COMPLEX,0,MPI_COMM_WORLD,code) if (ra

我有一个工作代码,一年多前我一直在一个旧集群上使用。今年,我想再次使用这段代码,但是,集群是不同的,结果变得毫无意义。我知道这个集群的具体情况,但是很难从那个旧集群中找到那些

我已经能够将问题缩小到
MPI\u BCAST
调用:

    if (rang.eq.0) print*, "psi for rang0 = ", psi
    CALL MPI_BCAST (psi, NSITES, MPI_DOUBLE_COMPLEX,0,MPI_COMM_WORLD,code)
    if (rang.eq.1) print*, "psi for rang1 = ", psi
在此之前,这种方法运行良好,
psi
正确地分布在所有级别上

现在,在秩
1
上,在这个新集群上,我得到了
psi
的初始值(复杂的零数组),而没有使用秩
0
中的值(非零值)进行更新

模块列表
给了我

1) 英特尔/13.0.1 2)openmpi/1.8.1

用于此新群集上正在使用的编译器

    PROGRAM minimal
    use mpi
    IMPLICIT NONE
    INTEGER :: NSITES, rang, i, code
    DOUBLE COMPLEX , DIMENSION (:), allocatable :: psi
    DOUBLE PRECISION ralpha, PI, val
    INTEGER :: NB_PROCS 

    CALL MPI_INIT(code)
    call MPI_COMM_SIZE (MPI_COMM_WORLD,nb_procs,code)
    call MPI_COMM_RANK (MPI_COMM_WORLD,rang,code)

    PI = 4.d0*atan(1.d0)

    NSITES = 10

    allocate (psi (NSITES) )

    DO i = 1, NSITES
      psi(i) = (0.0d0, 0.0d0)
    END DO

    val = 1.0 / dsqrt(1.0d0 * NSITES)

    DO i = 1, NSITES
      IF (rang.eq.0) THEN
           CALL RANDOM_NUMBER (ralpha)
           psi (i) = exp (2.0d0 * PI * (0.0d0, 1.0d0) * ralpha)    &
                   * val
      ENDIF
    ENDDO

    CALL MPI_BCAST (psi, NSITES, MPI_DOUBLE_COMPLEX,0,MPI_COMM_WORLD,code)
    if (rang.eq.1) print*, "psi for rang1 = ", psi

    CALL MPI_FINALIZE(code)

    END program minimal
我无法访问旧群集,因此无法检查加载了哪些编译器。然而,可能是这样的:

哪个mpif90
/opt/mpi/bullxmpi/1.1.16.5/bin/mpif90

当我在我的一封旧邮件中发现这个片段时

那么,MPI_BCAST的使用多年来是否发生了变化? 我还做了一个测试,添加了一个
MPI\u屏障
,只是为了确定,但没有效果

(在这个新的集群上)复制错误的最小示例的编辑


我已经在本地macbook上检查了这段代码,在那里它工作得很好。

罪魁祸首是默认加载的模块(openmpi/1.8.1)

首先,我尝试了其他一些方法,但忘记了在再次加载模块的地方更改提交脚本。因此,我只在编译时更改了模块,而不是在运行时

底线是,默认加载的模块已损坏,愚蠢的我没有正确地切换到其他模块来解决问题


它现在可以与openmpi/1.8.4一起使用。

您说您可以将其缩小到该调用范围,但是您能为我们做一个简单的介绍吗?如果没有这一点,我们必须对声明等做出大量的假设。要快速回答您的最后一个问题,MPI_BCAST没有改变。正如Francescalus所说的,请向我们展示一个完整的程序来演示这个问题。很可能您的代码一直有缺陷,但只是现在它导致了一些不同。没有什么不正常的,但是我们必须看到代码。我们将在晚上尝试编译这样的示例。对此很抱歉。这个最小的示例似乎重现了错误。BCAST之后打印出来的值都是零,而不是来自秩1的预期非零值。