for循环中的迭代变量错误:C程序,OpenMP

时间:2017-10-22 14:06:58

标签: c parallel-processing openmp

我正在尝试使用OpenMP在C中执行代码。以下是代码

#pragma omp parallel \
reduction(+:array[length])
{
    int start = 1, distance, nthreads;
    nthreads = omp_get_num_threads();
    printf("%d\n", nthreads);
    #pragma omp for   
    for (distance = 1; distance < length; distance = distance + distance) 
    {
        for (i = length - 1; i >= start; i--) 
        {
            array[i] = array[i] + array[i - distance];  
        }
        start *=2;  
    }
}

编译器抛出以下错误

**error**: increment expression refers to iteration variable ‘distance’
#pragma omp for

我试图在线浏览这个错误,但没有找到太多。解码错误的任何帮助都是有用的。

此外,还原条款是否应出现在#pragma omp parallel \旁边或#pragma omp for旁边的顶部。

1 个答案:

答案 0 :(得分:1)

OpenMP loop工作共享结构需要一个所谓的规范循环形式。您只能通过循环不变值递增循环变量。你必须重组你的循环,例如通过使用sqrt / <<。另请注意,您对start的使用不正确。计算从循环迭代开始。