Как правильно использовать MPI декартову топологию - PullRequest
0 голосов
/ 28 февраля 2012

Для начала мне нужно было рассчитать количество сумм, а затем найти минимум этих сумм, это было сделано так, используя mpi:

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
                 .
                 .
                 .   
    x = (size)/numprocs;
    low = myid * x;
    high = low + x;

    for(i =low; i < high; i++){
        for(j = 0; j < matrixDim; j++){
            for(k = 0; k < matrixDim; k+=gap){
                for(m = 0; m < matrixDim; m+=gap){
                    c1 = calculation1(i,j,k,m);
                    if(c1 > cutoff){
                        sum += calculation2(modifier1[k][m], modifier2[k][m]);
                    }      
                }
            }

            if(sum < min){
                min = sum;
                minI = i;
                minJ = j;
            }
            sum = 0;
        }
    }   
MPI_Reduce(&result, &minimum, 1, MPI_FLOAT, MPI_MIN, 0, MPI_COMM_WORLD);
if( 0 == myid)
printf("The  min is: %f", minimum);
MPI_Finalize();

Однако теперь вместо нахождения минимумасумма всей 2D-матрицы, мне нужно найти минимальную сумму каждого разбиения в матрице, раздел будет квадратом, определяемым четырьмя точками, и независимо от размера матрицы всегда будет 16 квадратов (матрица неменьше чем 800 * 800).Я пытаюсь реализовать это, используя декартову топологию MPI, однако у меня возникают проблемы с обертыванием реализации.Любая помощь или советы будут оценены.

1 Ответ

1 голос
/ 28 февраля 2012

Это скорее расширенный комментарий, чем ответ ...

Как и francesco Я не уверен, что вижу здесь необходимость в декартовой (или любой другой) топологии,Если ваша проблема в том виде, в каком вы ее описали, каждый процесс MPI может вычислить минимальную сумму раздела без отправки или получения данных от других процессов (кроме, вероятно, начального разброса и сбора терминалов).

Обычно топологиииспользуется для ситуаций, когда проблема разлагается на части, и эти части имеют некоторое представление об относительном соседстве: в декартовой топологии процесс (или часть проблемы) может иметь, например, соседей на востоке, западе, севере и юге.Я не вижу здесь ни такой концепции, ни какой-либо утилиты для ее навязывания.

...