Копирует ли OpenMP частные объекты?

Я пишу программу, которая читает огромный файл (3x280 ГБ) и выполняет процедуру подгонки к данным в файле.Распараллеливать такую ​​программу довольно удобно, там, где это легко делается с помощью OpenMP.

Чего я не понимаю, так это того, как в OpenMP берутся приватные переменные. Как мы все знаем, объекты fstream не подлежат копированию, и интуитивно это не позволяет мне использовать их как частные объекты. Итак, ридер файла был общим.

Позже у меня возникла проблема, и я подумал о том, чтобы сделать потоки fstreams частными... и знаете что? это сработало!!! Как это могло быть возможно?! если объект не копируется, как OpenMP может использовать разные копии одного и того же объекта для каждого ядра?

Вот как выглядит моя программа:

fstream dataReaderX(Dirs[0].c_str(), ios::in | ios::binary);
fstream dataReaderY(Dirs[1].c_str(), ios::in | ios::binary);
fstream dataReaderZ(Dirs[2].c_str(), ios::in | ios::binary);
#pragma omp parallel num_threads(cpus_num) shared(...) private(...,dataReaderX,dataReaderY,dataReaderZ)
{
...
}

Спасибо.

5
задан The Quantum Physicist 12 June 2012 в 15:34
поделиться