2014-01-20 4 views
-1

Это моя программа, которая вычисляет сумму 10000 элемента, который присвоить значение 1. Сумма должна быть 5000 для 1-й нити и 5000 для других, но для каждого запуска он дает различные выходныеКак распараллелить цикл в OpenMP?

#include<omp.h> 
#include<stdio.h> 
int main() 
{ 
int i,sum1=0,sum2=0,a[10000],sum_final=0; 
for(i=0;i<10000;i++) 
{ 
    a[i]=1; 
} 
#pragma omp parallel 
{ 
    if(omp_get_thread_num()==0) 
    { 
     for(i=0;i<5000;i++) 
     { 
      sum1+=a[i]; 
     } 
     printf("Sum1 is %d\n",sum1); 
    } 
    if(omp_get_thread_num()==1) 
    { 
     for(i=5000;i<10000;i++) 
     { 
      sum2+=a[i]; 
     } 
     printf("Sum2 is %d\n",sum2); 
    } 
} 
return 0; 
} 

ответ

2

Ваш счетчик цикла должен быть частным. Я думаю, вы должны попробовать

#pragma omp parallel private(i) 
Смежные вопросы