为什么此代码中的缩减会引发错误:

user defined reduction not found for 'avgs'

void parallel_avg_pixel(long img[DIM_ROW][DIM_COL][DIM_RGB], long *avgs) {
    int row, col, pixel;
    long count = 0;

#pragma omp parallel for reduction(+:avgs)
    for (row = 0; row < DIM_ROW; row++) {
        for (col = 0; col < DIM_COL; col++) {
            for (pixel = 0; pixel < DIM_RGB; pixel++){
                avgs[pixel] += img[row][col][pixel];
                count++;
            }
        }
    }

    count /= 3;

    for (pixel = 0; pixel < DIM_RGB; pixel++) {
        avgs[pixel] /= count;
    }
}

我预计这段代码会将每个线程的值avgs并行设置为私有,然后在for循环执行结束时将它们相加.

推荐答案

您的变量avgs是一个指针.你不能在指针上减少.OpenMP告诉你,如果你想减少指针,你需要为它们定义一个减少.

好的,您将其用作数组,但问题是OpenMP不知道它有多长.

使用以下语法:

#pragma omp reduction(+:avgs[0:DIM_RGB])

C++相关问答推荐

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

无效使用未定义类型'structsquare'?

需要大整数和浮点数.使用long long int和long double

在struct中调用函数,但struct在void中 *

括号中的堆栈实现错误问题

自定义应用程序上的日志(log)轮换问题

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

C语言编译阶段与翻译阶段的关系

如何在C中打印包含扫描字符和整数的语句?

Cairo STM32MP1 cairo_Surface_WRITE_TO_PNG始终返回CAROLIO_STATUS_WRITE_ERROR

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

C";中的ANN运行时判断失败#2-变量outputLayer;周围的堆栈已损坏.运行后出错

某些EAX值的不同调用方的CPUID结果不一致

将某些内容添加到链接列表时,列表中的其他项将使用最后添加的项的名称

为什么GCC 13没有显示正确的二进制表示法?

存储和访问指向 struct 的指针数组

在C中使用字符串时是否不需要内存分配?

C循环条件内的函数

C struct 中的冒泡排序

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数