2014-02-13 3 views
-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-файлах. Будут ли локальные переменные внутри этих функций частными? Я надеюсь, что это так.
Большая проблема: есть условия гонки, примечательные, потому что результат изменяется между несколькими программами. Поэтому вопрос для ответа должен быть похож на «Как может быть какая-то одна общая переменная, которая вызывает расы в этой программе?»
Любая помощь в расследовании этой проблемы высоко оценена, я также с радостью предоставит дополнительную информацию, если это необходимо.
EDIT:
Я только что обнаружил, что файлы, содержащие другие функции, содержат глобальные переменные. Это может быть проблема? Полагаю, что так.

ответ

0

Моя проблема действительно была глобальными переменными, представленными в других файлах. Ответ на мой первоначальный вопрос:
Переменные-члены класса наследуют атрибут совместного использования данных объекта, к которому они принадлежат. Если я понял, это справедливо, если вы не используете new для создания экземпляра класса.

Смежные вопросы