[英]Paralleling a loop in C++ with OpenMP
类似于非并行化的解决方案,这种并行化返回的解决方案与应返回的解决方案不匹配。
double angle=(PI/180)*atoi(extra);
unsigned int xf;
unsigned int yf;
int j;
#pragma omp parallel for private (j,xf,yf)
for(int i=0;i<width;i++){
for(j=0;j<height;j++){
xf=(unsigned int)ceil(((cos(angle)*(j-(((double)height)/2.0)))-(sin(angle)*(i-(((double)width)/2.0))))+(((double)height)/2.0));
yf=(unsigned int)ceil(((sin(angle)*(j-(((double)height)/2.0)))+(cos(angle)*(i-(((double)width)/2.0))))+(((double)width)/2.0));
if(xf<(unsigned int)height && xf>=0 && yf>=0 && yf<(unsigned int)width){
matrixRed2[yf][xf]=matrixRed[i][j];
matrixGreen2[yf][xf]=matrixGreen[i][j];
matrixBlue2[yf][xf]=matrixBlue[i][j];
}
}
}
我认为j不必在循环之外,因为它只包含分配给数组(具有独立于元素的数组)之前的临时值。 而且,两个for循环可以折叠。 编辑:每个xf,yf都不保证与i,j中的公式唯一。 因此,请保留顺序项,或者如果(xf,yf)中存在竞争条件,则可以尝试检查以保持最大(i,j)。 我不确定OpenMP是否可以在Visual Studio上运行,因为受支持的版本很旧(2.0,而最新的是4.5)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.