-1
我很難並行化一個程序。我有一個Program
類,其中包含一些變量(例如opencv Mat)和函數run
。OpenMP中類成員變量的數據共享屬性
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文件中定義的函數。這些函數中的局部變量是否是私有的?但願如此。
大問題:存在競爭條件,值得注意的是因爲結果在多個程序執行之間變化。所以要回答的問題應該是這樣的:「怎麼能有任何一個共享變量導致這個程序中的比賽?」
任何幫助調查這個問題是高度讚賞,我也會很高興地提供額外的信息,如果需要的話。
編輯:
我剛剛發現包含其他函數的文件包含全局變量。這可能是一個問題嗎?我猜是這樣。