Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阵列中的OpenMP SIMD缩减:“0”;错误:必须在输入此OpenMP pragma时共享缩减变量;_C_Multithreading_Parallel Processing_Openmp_Simd - Fatal编程技术网

C 阵列中的OpenMP SIMD缩减:“0”;错误:必须在输入此OpenMP pragma时共享缩减变量;

C 阵列中的OpenMP SIMD缩减:“0”;错误:必须在输入此OpenMP pragma时共享缩减变量;,c,multithreading,parallel-processing,openmp,simd,C,Multithreading,Parallel Processing,Openmp,Simd,我试图计算矩阵中相邻元素的平均值,但我一直无法让OpenMP的矢量化工作。根据我对第二个嵌套for循环的理解,reduce子句应该确保在写入next的元素时不会出现争用条件。然而,在编译代码时(我尝试了GCC 7.3.0和ICC以及OpenMP>4.5的自动矢量化),我得到了报告:“错误:在输入此OpenMP pragma时必须共享减少变量“next”。为什么在默认情况下共享变量时会出现这种情况?添加shared(next)似乎没有帮助,如何解决此问题 //上面的代码(…) 尺寸常数宽度=100

我试图计算矩阵中相邻元素的平均值,但我一直无法让OpenMP的矢量化工作。根据我对第二个嵌套for循环的理解,
reduce
子句应该确保在写入
next
的元素时不会出现争用条件。然而,在编译代码时(我尝试了GCC 7.3.0和ICC以及OpenMP>4.5的自动矢量化),我得到了报告:“错误:在输入此OpenMP pragma时必须共享减少变量“next”。为什么在默认情况下共享变量时会出现这种情况?添加
shared(next)
似乎没有帮助,如何解决此问题

//上面的代码(…)
尺寸常数宽度=100;
尺寸常数高度=100;
float*restrict next=malloc(sizeof(float)*宽度*高度);
//“下一步”的初始化(工作正常)
#用于simd崩溃的pragma omp(2)
对于(尺寸j=1;j
问题在于GCC 7.3.0不支持

#pragma omp for simd collapse(4) reduction(+:next[0:width*height]) 
在此上下文中使用数组节的
缩减

转发支持此功能:

从GCC 9开始,就有了最初的OpenMP 5支持(基本上是C/C++, 仅限)。GCC10增加了更多的特性,主要是针对C/C++的,但也针对 Fortran