Я хочу знать, сколько времени каждый поток использует в цикле for.Я хочу, чтобы time_taken был приватным для каждого потока, чтобы они могли добавлять туда свое время.Лучше всего, я бы хотел общее время для каждого потока, а не время для каждой итерации в цикле while.
double time_taken = 0.0;
while(delta >= epsilon) {
delta = 0.0;
double wtime = omp_get_wtime();
#pragma omp parallel for reduction(+:delta)
for (i = 0; i < workSize; i++) {
#do some work and change delta
}
time_taken += omp_get_wtime() - wtime
printf("time taken by thread %d: %f\n", omp_get_thread_num(), time_taken);
}
Я пытался сделать тайм-тайм закрытым внутри цикла while следующим образом:
double time_taken = 0.0;
while(delta >= epsilon) {
delta = 0.0;
#pragma omp private(time_taken)
{
double wtime = omp_get_wtime();
#pragma omp parallel for reduction(+:delta)
for (i = 0; i < workSize; i++) {
#do some work and change delta
}
time_taken += opm_get_wtime() - wtime
printf("time taken by thread %d: %f\n", omp_get_thread_num(), time_taken);
}
}
Я также изучил использование threadprivate
, но не могу понять, как правильно его использовать.