从光盘和并行处理OpenMP顺序读取

时间:2014-02-25 14:27:40

标签: c++ openmp

有我的问题:

我有很多相同大小的文件(超过1000个)(几个Mb)。我必须阅读它们并提取一些信息。信息提取的这一步需要一些时间,所以这次我可以使用(至少我希望如此)读取另一个文件。我尝试做的是:

#pragma omp parallel for
for (int i=0; i<FilesCount; i++)
{
    myData Data;

    #pragma omp critical
    {
        Data.ReadDataFromFile (FileNames[i]);
    }

    //Operate with the Data and extract some information
}

它不能像我期望的那样工作。我也尝试过使用:

#pragma omp ordered

,结果相同 - 只使用一个线程。 其他OpenMP的东西工作正常。也许问题是我使用fstream进行阅读?

它有什么问题以及如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

标有

的块中的所有内容
#pragma omp critical

一次只能由一个线程执行。所有其他线程必须等到当前线程离开该块。

Section about 'critical' in an OpenMP tutorial