巨大なファイル (3x280 GB) を読み取り、ファイル内のデータにフィッティング手順を実行するプログラムを作成しています。このようなプログラムを並列化することは非常に便利で、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)
{
...
}
ありがとうございました。