Как бы я собрал секционированную матрицу MPI?
Изначально у меня есть матрица, которую я разбиваю на несколько субматриц по строкам и столбцам, используемых для алгоритма Флойда Уоршалла.
Когда я собираю субматрицы, они приходят неупорядоченными.
Вместо того, чтобы получать значения, которые будут соответствовать моей исходной матрице
M[ij] 00, 01, 02, 03, 10, 11...
Я получаю их в порядке подматрицы (представьте себе подматрицу 2×2)
00,01,10,11,02,03,12,13
Как я могу изменить порядок несортированной матрицы Флойда?
Вы можете использовать этот код, чтобы сделать это
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;
}
}
}
}
Других решений пока нет …