-
Notifications
You must be signed in to change notification settings - Fork 1
/
test2.cpp
89 lines (75 loc) · 1.93 KB
/
test2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// OpenMPTest.cpp : 定义控制台应用程序的入口点。
//
#include "omp.h"
#include "stdio.h"
// #include <iostream>
// using namespace std;
//void main()
//{
//#pragma omp parallel for num_threads(6)
// //上面程序指定了6个线程,迭代量为12,每个线程都分配到了2次的迭代量
// //备注:如果for循环比较简单(执行时间短),不建议使用多线程并发,因为线程
// //间的调度也会比较耗时,是一个不小的开销。
// for (int i = 0; i < 12;i++)
// {
// printf("OpenMP Test,线程编号为:%d\n", omp_get_thread_num());
// }
// system("pause");
//
//}
//OpenMP效率提升以及不同线程数效率对比
void test()
{
for (int i = 0; i < 80000; i++)
{
}
}
void main()
{
float startTime = omp_get_wtime();
//指定两个线程
#pragma omp parallel for num_threads(2)
for (int i = 0; i < 80000; i++)
{
test();
}
float endTime = omp_get_wtime();
printf("指定 2 个线程,执行时间: %f\n", endTime - startTime);
startTime = endTime;
//指定4个线程
#pragma omp parallel for num_threads(4)
for (int i = 0; i < 80000; i++)
{
test();
}
endTime = omp_get_wtime();
printf("指定 4 个线程,执行时间: %f\n", endTime - startTime);
startTime = endTime;
//指定8个线程
#pragma omp parallel for num_threads(8)
for (int i = 0; i < 80000; i++)
{
test();
}
endTime = omp_get_wtime();
printf("指定 8 个线程,执行时间: %f\n", endTime - startTime);
startTime = endTime;
//指定12个线程
#pragma omp parallel for num_threads(12)
for (int i = 0; i < 80000; i++)
{
test();
}
endTime = omp_get_wtime();
printf("指定 12 个线程,执行时间: %f\n", endTime - startTime);
startTime = endTime;
//不使用OpenMP
for (int i = 0; i < 80000; i++)
{
test();
}
endTime = omp_get_wtime();
printf("不使用OpenMP多线程,执行时间: %f\n", endTime - startTime);
startTime = endTime;
system("pause");
}