【问题标题】:Data-sharing attribute of class member variables in OpenMPOpenMP中类成员变量的数据共享属性
【发布时间】:2014-02-13 15:14:00
【问题描述】:

我很难并行化程序。我有一个类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 文件中定义的函数。这些函数中的局部变量是私有的吗?我希望如此。
最大的问题:存在竞争条件,值得注意的是因为多个程序执行之间的结果会发生变化。所以要回答的问题应该是“如何有任何单个共享变量会导致该程序中的竞争?”
非常感谢调查此问题的任何帮助,如果需要,我也很乐意提供其他信息。
编辑:
我刚刚发现包含其他函数的文件包含全局变量。这会是个问题吗?我想是的。

【问题讨论】:

    标签: c++ opencv parallel-processing openmp


    【解决方案1】:

    我的问题确实是其他文件中引入的全局变量。我最初的问题的答案是:
    类成员变量将继承其所属对象的数据共享属性。如果我没记错的话,这仅在您不使用 new 进行类实例化时才成立。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多