OpenMP和文件I / O.

时间:2010-08-26 16:19:06

标签: c++ file-io parallel-processing openmp

我正在对我的代码进行一些时间试验,从逻辑上讲,与OpenMP并行化似乎非常容易,因为每个试验都独立于其他试验。就目前而言,我的代码看起来像这样:

for(int size = 30; size < 50; ++size) {
    #pragma omp parallel for
    for(int trial = 0; trial < 8; ++trial) {
        time_t start, end;
        //initializations
        time(&start);

        //perform computation

        time(&end);

        output << size << "\t" << difftime(end,start) << endl;
    }
    output << endl;
}

我有一种潜在的怀疑,这是一种失礼,但是,因为两个线程可能同时向输出写入值,从而搞砸了格式化。这是一个问题,如果是这样,我会用output << size << ...语句修复#pragma omp critical代码吗?

2 个答案:

答案 0 :(得分:2)

不要在意你的输出是否会搞砸(很可能会)。除非您非常小心地将OpenMP线程分配给不共享内存带宽等资源的不同处理器,否则您的时间试验也不是很有意义。不同的运行将相互干扰。

您要问的问题的解决方案是将结果时间写入数组的指定元素,每个试验都有一个插槽,然后输出结果。

答案 1 :(得分:0)

只要你不介意个别线条出现故障,你就可以了。 OpenMP应确保一次打印整行。

但是,你需要在pragma中声明start和end为private,否则线程会覆盖它们并弄乱你的时间。