在MPI上进行负载平衡是否正确? (包括代码)

时间:2012-12-09 16:15:23

标签: mpi multidimensional-array

这是任务。给定2列3列n行的数组,对多个进程进行负载均衡。我们给了一个函数,比如叫做my_function(),最初是在串行代码中完成所有的工作(接受整个2个数组并做它需要做的任何计算)。这是尝试解决方案(请注意,我们无法保证连续的内存,有时它会从连续变为非连续而不另行通知)。

if(id == 0) then
  do i=0,(np - 1)
    if(i /= 0) then
      start_1 = 1 + i*l_n
      end_1   = (i+1)*l_n

      start_2 = 1 + i*l_n
      end_2   = (i+1)*l_n

      new_array1 = old_array1(1:3,start_1:end_1)
      new_array2 = old_array2(1:3,start_2:end_2)

      call MPI_Send(new_array1,l_n*3, MPI_REAL, i, 0,MPI_COMM_WORLD, ierror)
      call MPI_Send(new_array2,l_n*3, MPI_REAL, i, 0,MPI_COMM_WORLD, ierror)
      CALL my_function(new_array1,new_array2,l_n,id,np)
    else
      new_array1 = old_array1(1:3,1:l_n)
      new_array2 = old_array2(1:3,1:l_n)
      CALL my_function(new_array1,new_array2,l_n,id,np)
    end if
  end do
else
  call MPI_Recv(new_array1,3*l_n, MPI_REAL, 0, 0,MPI_COMM_WORLD, istatus, ierror)
  call MPI_Recv(new_array2,3*l_n, MPI_REAL, 0, 0,MPI_COMM_WORLD, istatus, ierror)
end if

PS:np:使用的进程数量,l_n基本上为n/npnnp保证相互均分。

首先,我不确定它应该传递给MPI_Recv,这是否正确我做的方式?其次,主要问题是:我的负载均衡是否正确?

0 个答案:

没有答案