2014-02-13 38 views
-1

我很難並行化一個程序。我有一個Program類,其中包含一些變量(例如opencv Mat)和函數runOpenMP中類成員變量的數據共享屬性

class Program { 
    Mat image; 
    ... 
    void run(string inputFileName) { 
     ... 
     someFunctionInAnotherFile(image, ...); // call by reference, image gets manipulated 
    } 
    ... 
}; 

int main() { 
    #pragma omp parallel default(none) shared(inputVector) 
    Program program; 

    #pragma omp for schedule(guided,1) 
    for(unsigned int inputNumber = 0; inputNumber < inputVector.size(); ++inputNumber) { 
    program.run(inputVector[ inputNumber ]); 
} 
} 

變量program應該是私有的,因爲parallel區域內聲明的,對不對?但是會員image呢,它也會是私人的嗎?我在openMP規範中找不到任何有關它的信息,只有關於動態存儲變量的信息(但是類成員是什麼存儲類?)。
run本身調用一些其他.cpp文件中定義的函數。這些函數中的局部變量是否是私有的?但願如此。
大問題:存在競爭條件,值得注意的是因爲結果在多個程序執行之間變化。所以要回答的問題應該是這樣的:「怎麼能有任何一個共享變量導致這個程序中的比賽?」
任何幫助調查這個問題是高度讚賞,我也會很高興地提供額外的信息,如果需要的話。
編輯:
我剛剛發現包含其他函數的文件包含全局變量。這可能是一個問題嗎?我猜是這樣。

回答

0

我的問題確實是其他文件中引入的全局變量。我最初的問題的答案是:
類成員變量將繼承它們所屬對象的數據共享屬性。如果我說得對,只要你不使用new來實現類的實例化,這隻能保持。