我正在对我的代码进行一些时间试验,从逻辑上讲,与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
代码吗?
答案 0 :(得分:2)
不要在意你的输出是否会搞砸(很可能会)。除非您非常小心地将OpenMP线程分配给不共享内存带宽等资源的不同处理器,否则您的时间试验也不是很有意义。不同的运行将相互干扰。
您要问的问题的解决方案是将结果时间写入数组的指定元素,每个试验都有一个插槽,然后输出结果。
答案 1 :(得分:0)
只要你不介意个别线条出现故障,你就可以了。 OpenMP应确保一次打印整行。
但是,你需要在pragma中声明start和end为private,否则线程会覆盖它们并弄乱你的时间。