c++ - OpenMP 和文件 I/O

标签 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 的代码语句修复它?

最佳答案

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

您所问问题的解决方案是将结果时间写入数组的指定元素中,每次试验有一个槽,并在事实发生后输出结果。

关于c++ - OpenMP 和文件 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577144/

相关文章:

c# - 如何将 Parallel.ForEach 与线程局部状态一起使用?

c++ - 在qt中,我如何实现一个与代码中的变量保持一致的小部件

C++ 诡计 : output actual enum, 不是它的值

java - 使用线程文件写入和读取对象

java - 如何在不创建新文件和复制的情况下修改文件拳头256kb?

shell - 1>/dev/null 2>&1 & pid1=$!意思?

c++ - 从代码中引用 CMAKE 变量

c++ - OO 正确性 - 继承层次结构 - 谁创建其他对象使用的对象?

C# 读取文本文件,换行

c++ - 通过并行处理在二维数组中找到最大值及其坐标