我很难将程序并行化。我有一个类Program
,其中包含一些变量(例如opencv Mat)和一个函数run
。
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 :(得分:0)
我的问题确实是其他文件中引入的全局变量。我最初的问题的答案是:
类成员变量将继承它们所属对象的数据共享属性。如果我做对了,只要您不使用new
进行类实例化,这只会保留。