2016-12-05 66 views
-1

我将如何去收集分区的MPI矩阵?如何使用MPI收集行和列分区矩阵?

最初我有一个矩阵,我分解成几个行和列方式的子矩阵,用于弗洛伊德warshall算法。

当我收集他们无序的子矩阵时。

相反,将适合在我原来的矩阵

M[ij] 00, 01, 02, 03, 10, 11... 

我让他们在子矩阵的顺序,获取值的(想象子矩阵是2×2)

00,01,10,11,02,03,12,13 

哪有我重新排序未排序的弗洛伊德矩阵?

+0

C或C++?他们非常独特。 –

+2

[使用MPI在C中发送二维数组块的可能的副本](http://stackoverflow.com/questions/9269399/sending-blocks-of-2d-array-in-c-using-mpi) – Zulan

回答

-1

,你可以使用此代码来做到这一点

i = 0; 
    j = 0; 
    k = 0; 
    bump = 0; 
    for (written = 0; written < matrix_dimensions * matrix_dimensions; written += 1) { 
     matrix[written] = out_of_order_subblocks[k * matrix_dimensions * subblock_dimensions + j * subblock_dimensions * subblock_dimensions + i + bump]; 
     i += 1; 
     if (i % subblock_dimensions == 0) { 
     i = 0; 
     j += 1; 
     if (j % grid_dimensions == 0) { 
      j = 0; 
      bump += subblock_dimensions; 
      if (bump == subblock_dimensions * subblock_dimensions) { 
      bump = 0; 
      k += 1; 
      } 
     } 
     } 
    }