OpenMP Stack溢出诊断

时间:2015-10-13 23:57:43

标签: c++ openmp stack-overflow

我正在使用OpenMP线程函数运行程序。它适用于较小的问题大小,但在我增加问题大小时会在某个时刻出现段错误。

我读过这与堆栈溢出有关,但我的静态变量是固定大小的,所以我不会看到堆栈大小随问题大小而变化。示例代码如下:

float myfunc(float *bigArray1FromMain, float *bigArray2FromMain, int N)
{
// bigArray1FromMain has been malloc'd to accommodate N floats
    #pragma omp parallel
    {
        int localArray[2];
        int i;

        #pragma omp for
        for(i = 0; i < N; i++)
        {
           localArray[0] = someIndex(i);
           localArray[1] = someIndex(i);
           bigArray1FromMain[i] = bigArray2FromMain(localArray[0]) 
                                  + bigArray2FromMain(localArray[1]);
        }
    }
}

为什么此代码在N增加时中断?我的理解是每个线程都有自己的localArrayi副本,这些副本需要3个整数。这不应随着问题的大小而改变。

如果localArray[0] or [1]包含不同线程的相同整数,则两个线程可能同时访问bigArray2FromMain的相同元素。但由于它没有被修改,我认为不应该是一个问题。这是否需要包含在atomiccritical条款中?

另一种可能性是someIndex()是错误的,但我认为并非如此。

我错过了什么吗? 感谢。

0 个答案:

没有答案