Я работаю над параллельным матрично-матричным множителем в MPI. У меня есть часть вычисления, но я также хочу рассчитать процессорное время. Я зацикливаюсь, потому что похоже, что некоторые процессы сообщают время начала и окончания 0 и для задачи, которая должна занимать младшую (малые матрицы), программа сообщает о 1000-секундном времени процессора (хотя я знаю, что она выполняется в секундах от наблюдения). Вот что я делаю сейчас:Расчет времени процессора при использовании MPI
#include <time.h>
#include "mpi.h"
// other includes
int main()
{
int start, end, min_start, min_end;
if (rank == 0)
{
// setup stuff
start = clock();
MPI_Reduce(&min_start, &start, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
// master computation stuff
end = clock();
MPI_Reduce(&max_end, &end, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
cout << "CPU time was "
<< (double)(max_end - min_start)/CLOCKS_PER_SEC
<< " seconds" << endl;
}
else if (rank != 0)
{
// setup stuff
start = clock();
MPI_Reduce(&min_start, &start, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
// slave computation stuff
end = clock();
MPI_Reduce(&max_end, &end, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
}
}
Я не уверен, что является источником ошибки. Когда я добавил в выводе отладки (после заявления if (rank == 0)
и else if (rank != 0)
)
MPI_Barrier(MPI_COMM_WORLD);
for (int i=0; i<size; i++)
{
if (rank == i)
cout << "(" << i << ") CPU time = "
<< end << " - " << start
<< " = " << end - start << endl;
MPI_Barrier(MPI_COMM_WORLD);
}
я получаю следующие выходные данные
CPU time was 1627.91 seconds
(1) CPU time = 0 - 0 = 0
(2) CPU time = 0 - 0 = 0
(0) CPU time = 1627938704 - 32637 = 1627906067
(3) CPU time = 10000 - 0 = 10000
Прежде всего, я бы не использовал 'clock()' вообще. Вы можете использовать 'chrono' с C++ 11 или его реализацию Boost с pre C++ 11. –