我正在尝试使用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
旁边的顶部。
答案 0 :(得分:1)
OpenMP loop
工作共享结构需要一个所谓的规范循环形式。您只能通过循环不变值递增循环变量。你必须重组你的循环,例如通过使用sqrt
/ <<
。另请注意,您对start
的使用不正确。计算从循环迭代开始。