Я пытаюсь измерить время, необходимое для выполнения фрагмента кода в различных условиях.Я предоставляю число n, и программа выводит время, необходимое для выполнения цикла n раз.Но отображаемое время кажется неточным при использовании с директивой #pragma.
Я пробовал с и без директивы #pragma.
#include <threads.h>
#include <stdio.h>
#include <time.h>
#include <omp.h>
void loopy(int);
void runloop(int);
int main(int argc, char *argv[]){
int num = atoi(argv[1]);
printf("The number entered is :: %d\n",num);
displayTimeTaken(loopy,num);
}
void loopy(int num){
int i;
#pragma omp parallel for
for(i=0;i<num;i++)for(int j=0;j<num;j++);
}
void displayTimeTaken(void *function(), int num){
clock_t start, end;
double cpu_time_used;
start = clock();
function(num);
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("Time taken is :: %10fs for the number %d\n ", cpu_time_used,num);
}
Результаты в моем ЦП для ввода 100000: :: (без параллелизма)
Время, потраченное на это :: 24,632967 с для числа 100000
Реальное время, записанное в моих часах, также составляет 24 с.
Пока все хорошо.
(с параллелизмом)
Время, затраченное на:: 24.408596s для числа 100000
Но в реальном времени это заняло около 8 секунд!Я проверял код несколько раз, но для меня не имеет смысла, как прагма влияет на отображаемое время.Я запустил GDB и обнаружил, что программа запускает 3 потока.
The number entered is :: 100000
[New Thread 0x7ffff7d79700 (LWP 8761)]
[New Thread 0x7ffff7578700 (LWP 8762)]
[New Thread 0x7ffff6d77700 (LWP 8763)]
Time taken is :: 24.177702s for the number 100000
[Thread 0x7ffff6d77700 (LWP 8763) exited]
[Thread 0x7ffff7578700 (LWP 8762) exited]
[Thread 0x7ffff7d79700 (LWP 8761) exited]
[Inferior 1 (process 8760) exited normally]
Поэтому моя первая теория заключалась в том, что время, затрачиваемое отдельными потоками, складывается.Но опять же, для меня это не имеет смысла.
Я был бы счастлив, если бы кто-то смог пролить свет на это.