我正在对我的代码进行一些时间试验,从逻辑上讲,与 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/