|
我试着按这个方法改写了程序,发现可以起到并行的作用,但最后输出的结果是正确结果的1/np倍(np是并行核数)。我的程序在演化这个部分是把最后的数据存储到一个数组P(i, j, itraj)里面,所有轨迹演化完了后对这个数组取一个轨迹系综平均:
- ... (前面是抽样演化部分)
- do i=1,M
- do j=1, N
- result(i,j)=sum(P(i,j,:))/Ntraj
- end do
- end do
复制代码
我猜测是这一步出了问题。但我有一点不明白:如果在此之前已经用了mpi_finalize退出MPI环境,那么这一部分不应该是串行的吗?还会受到MPI的影响吗?另外我看有些MPI程序好像是用归约(REDUCE)的方法来求和,请问这种情况是否一定要用MPI的归约?
还有一个问题,我看到大部分的MPI教程都是说程序的开头必须用MPI_INIT,最后结束部分用MPI_FINALIZE。但我这个程序动力学只是一个subroutine,只在这个subroutine里使用MPI环境可以吗?或者说一个程序只把并行部分用MPI_INIT和MPI_FINALIZE框起来,那么可以保证只有这个部分是并行的,其他部分是串行的吗?非常感谢! |
|