首页 > 解决方案 > 如何将 MPI 与共享内存一起使用?

问题描述

我有两个要相乘的矩阵。我想将 MPI 与共享内存一起使用,但不明白我该如何做到这一点。

我不明白我应该在准备阶段做什么。如果我的流的rank是0,那么我需要初始化窗口,但是如果rank不是0呢?

如果一个窗口是所有线程的共享内存位置,那么如何同步它的使用?

另外,我不明白如何并行化乘法,我知道线程数。应该如何改变循环的参数?

我一块一块地整理了几个例子,但我怀疑我的代码是否正确。请给我一个提示。谢谢!

real :: a(5,6), b(6,4), result(5,6)

call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size_Of_Cluster, ierror) ! get count of process 
call MPI_COMM_RANK(MPI_COMM_WORLD, process_Rank, ierror) ! get if of current process

MPI_Win window;
MPI_Win_create(&result, sizeof(&result), sizeof(&result), MPI_INFO_NULL, MPI_COMM_WORLD, &window);

do i = 1,5
  result[i,j] = 0
  do j = 1,6 
   result[i,j] = result[i,j] + a[i,j] * b[j,i]
  end do
end do

MPI_Win_fence(0, window);

 if(process_Rank> 0)
    {
        // Push my value into the first integer in MPI process 0 window
        MPI_Accumulate(&result, 1, MPI_INT, 0, 0, 1, MPI_INT, MPI_SUM, window);
    }
 
    MPI_Win_fence(0, window);
 
    if(my_rank == 0)
    {
        printf("[MPI process 0] result ");
   }
 
   MPI_Win_free(&window);
   MPI_Finalize();

标签: parallel-processingfortranmpi

解决方案


推荐阅读