OpenMP,我该如何处理这些变量?

时间:2017-02-02 11:33:57

标签: c multithreading debugging openmp variable-declaration

我一直在尝试自学OpenMP,事实上我今天从一些例子开始。我尝试通过制作一个程序来扩展其中一个示例,该程序可以从2d数组中选出最高数字,最低数字,它们的坐标和所有元素的总值。

以下是代码的摘录:

#pragma omp parallel for reduction(+:total) reduction(max : max) reduction (min : min) private(j)
for( i=0;i<size; i++){
    for(j=0; j<size;j++){
        total += arr[i][j];
        if(arr[i][j] > max){
            #pragma omp critical
            {
                if(arr[i][j] > max){
                   max=arr[i][j];
                   maxX=i;
                   maxY=j;
                }
            }
        }
         if(arr[i][j] < min){
            #pragma omp critical
            {
                if(arr[i][j] < min){
                   min=arr[i][j];
                   minX=i;
                   minY=j;
                }
            }
        }
    }
 }

唯一似乎错误的是坐标maxXmaxYminXminY。从执行到执行(超过1个线程),它们的值会发生变化,有时会给出正确答案,但大多数情况下都没有。

我需要对这些变量做些什么才能做到这一点?

0 个答案:

没有答案