Как правильно использовать декартову топологию MPI

Для начала мне нужно было вычислить количество сумм, а затем найти минимум этих сумм, это было сделано так, с использованием 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, однако у меня возникают проблемы с реализацией. Любая помощь или советы будут оценены.


person Bob gilong    schedule 28.02.2012    source источник
comment
Не могли бы вы уточнить, как вы хотели бы распараллелить алгоритм? Какие циклы вы собираетесь распараллелить и где в игру вступает декартова топология?   -  person François Févotte    schedule 28.02.2012


Ответы (1)


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

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

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

person High Performance Mark    schedule 28.02.2012