基于OpenMP的C++并行编程简单示例

示例要求:在整数A和B之间找到符合条件的值X,使f(X)=C。

示例代码(需要在VS中开启OpenMP支持):

 1 #include<iostream>
 2 #include<time.h>
 3 #include"omp.h"
 4 
 5 int f(int i) {
 6     int i4_huge = 2147483647;
 7     int j;
 8     int k;
 9     int value;
10     value = i;
11     for (j = 1; j <= 5; j++)
12     {
13         k = value / 127773;
14         value = 16807 * (value - k * 127773) - k * 2836;
15         if (value <= 0)
16         {
17             value = value + i4_huge;
18         }
19     }
20     return value;
21 }
22 
23 int search(int a, int b, int c)
24 {
25     int fi;
26     int i;
27     int j;
28 
29     j = -1;
30 
31     #pragma omp parallel for num_threads(6)
32     for (i = a; i <= b; i++)
33     {
34         fi = f(i);
35         if (fi == c)
36         {
37             j = i;
38             break;
39         }
40     }
41 
42     return j;
43 }
44 
45 
46 int main()
47 {
48     int j;
49     int a = 1;
50     int b = 10000000;
51     int c = 45;
52     double wtime;
53 
54     clock_t start, finish;
55     double totaltime;
56     start = clock();
57 
58     j = search(a, b, c);
59 
60     finish = clock();
61     totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
62     std::cout << "\n search运行时间为" << totaltime << "秒!" << std::endl;
63     system("pause");
64     return 0;
65 }
View Code

并行算法的加速情况:

加速前:

加速后:

 

转载于:https://www.cnblogs.com/GISQZC/p/9333312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值