2015-10-21 2 views
1

У меня есть одна программа (которая вычисляет матричное умножение с помощью алгоритма пушки), реализована в MPI для C, я установил часы, чтобы увидеть ВСЕГО времени этой программы, при этом я имею в виду весь процесс сумма.MPI Общее время выполнения

Но в результате я получаю время каждого процесса.

Часть моего кода в начале моей основной:

clock_t begin, end; 
double time_spent; 
begin = clock(); 

/* Initializing */ 
MPI_Init (&argc, &argv); 

Затем в конце моего кода у меня есть:

MPI_Finalize(); 

    end = clock(); 
    time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 
    printf("\n\nTIME: %f SECONDS\n\n", time_spent); 

ответ

4

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

  1. Перемещайте меру конца времени перед вызовом MPI_Finalize(), как вы будете необходимо дополнительное общение;
  2. Соберите индивидуальное время через MPI_Reduce() для обработки # 0 (например); и, наконец,
  3. печать на этот раз с процессом 0.

Помимо этого, если у вас нет веских причин поступить иначе, я хотел бы призвать вас использовать MPI_Wtime() как таймер, а не несколько недостоверных clock() таймера.

Код может выглядеть затем следующим образом:

int main(int *argc, char* argv[]) { 
    MPI_Init(&argc, &argv); 
    double tbeg = MPI_Wtime(); 

    // a lot of stuff here 

    // you might want a barrier here... 
    // MPI_Barrier(MPI_COMM_WORLD); 
    double elapsedTime = MPI_Wtime() - tbeg; 
    double totalTime; 
    MPI_Reduce(&elapsedTime, &totalTime, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); 
    if (rank == 0) { 
     printf("Total time spent in seconds id %f\n", totalTime); 
    } 
    MPI_Finalize(); 
    return 0; 
} 
+0

Спасибо! Я попробую прямо сейчас! –

0

Да, конечно, что вы получаете правильно.

Если вы хотите, общее время, то есть сумма времени, затраченного в каждом процессе, а затем отправить локальный time_spent каждого узла в главном узле, выполнить суммирование локальных time_spent-х там и распечатать его.

Смежные вопросы