【发布时间】:2019-05-06 09:42:26
【问题描述】:
我正在尝试测量在不同条件下执行一段代码所花费的时间。我提供了一个数字 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 在我的 CPU 中的结果是 :: (无并行)
数字 100000 所用时间为 :: 24.632967s
我的时钟记录的实时时间也是 24 秒。
到目前为止一切顺利。
(具有并行性)
数字 100000 所用时间为 :: 24.408596s
但实际花费的时间约为 8 秒! 我多次检查了代码,但对我来说 pragma 如何影响显示时间没有任何意义。我运行了 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]
因此,我的第一个理论是,不知何故,各个线程所花费的时间正在加起来。但同样,这对我来说毫无意义。
如果有人能对此有所了解,我会很高兴。
【问题讨论】: