我正在编写一个读取大文件(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)
{
...
}
谢谢你。