簡體   English   中英

使用OpenMP在C ++中並行處理循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM