求大神指点,点进来看看,关于检查代码错误,有福利!
1: #include <stdio.h>
2: #include <omp.h>
3: static long num_steps = 10000 * 4;
4: double step;
5: double gsum1;
6: double gsum2;
7:
8: void SafeAdd(double sum1, double sum2, omp_lock_t &lock1,omp_lock_t &lock2 )
9: {
10: // lock gsum1 and update
11: omp_set_lock( &lock1 );
12: gsum1 += sum1;
13: // lock gsum2 and update
14: omp_set_lock( &lock2 );
15: gsum2 += sum2;
16: omp_unset_lock( &lock2 );
17: omp_unset_lock( &lock1 );
18:}
19:
20:int main()
21:{
22: int i;
23: double x1,x2;
24: omp_lock_t lock1, lock2;
25: gsum1=0.0;
26: gsum2=0.0;
27:
28: omp_init_lock(&lock1);
29: omp_init_lock(&lock2);
30: printf(“Calculating Pi ...\n”);
31: step = 1.0/(double) num_steps;
32: for (i=0;i< num_steps; i+=4)
33: {
34: double sum1,sum2;
35: #pragma omp parallel sections
36: {
37: #pragma omp section
38: {
39: // calculate first bar
40: x1 = (i+ 0.5)*step;
41: x1*=x1;
42: sum1 = 4.0/(1.0+x1);
43:
44: // calculate second bar
45: x2 = (i+ 1.5)*step;
46: x2*=x2;
47: sum2 = 4.0/(1.0+x2);
48: SafeAdd(sum1,sum2,lock1,lock2);
49: }
50: #pragma omp section
51: {
52: // calculate third bar
53: x1 = (i+ 2.5)*step;
54: x1*=x1;
55: sum1 = 4.0/(1.0+x1);
56:
57: // calculate fourth bar
58: x2 = (i+ 3.5)*step;
59: x2*=x2;
60: sum2 = 4.0/(1.0+x2);
61: SafeAdd(sum1,sum2,lock2,lock1);
62: }
63: }
64: }
65:
66: // calc value of pi
67: double pi = step * (gsum1+gsum2);
68: printf(“pi: %2.21f\n”,pi);
69: omp_destroy_lock( &lock1 );
70: omp_destroy_lock( &lock2 );
71:}
这样一份代码,有木有人帮忙用Inspector xe检测一下错误啊
小弟感激不尽,若有人帮忙,必有福利送上!