t2k*_*316 3 parallel-processing performance printf multithreading openmp
我刚刚编写了第一个OpenMP程序,它并行化了一个简单的for循环.我在双核机器上运行代码,从1个线程到2个线程时看到了一些加速.但是,我在学校的Linux服务器上运行相同的代码,并没有看到加速.在尝试了不同的事情后,我终于意识到删除一些无用的printf语句会导致代码显着加速.下面是我并行化的代码的主要部分:
#pragma omp parallel for private(i)
for(i = 2; i <= n; i++)
{
printf("useless statement");
prime[i-2] = is_prime(i);
}
Run Code Online (Sandbox Code Playgroud)
我想printf的实现有很大的开销,OpenMP必须与每个线程重复.是什么导致了这种开销,为什么OpenMP无法克服它?
猜测,但也许stdout被锁定?
通常,printf是一项昂贵的操作,因为它与其他资源(例如文件,控制台等)交互.
我的实验经验是,Windows控制台上的printf非常慢,在Linux控制台上速度要快得多,但如果重定向到文件或/ dev/null则速度最快.
我发现printf-debugging会严重影响我的应用程序的性能,我会谨慎使用它.
尝试运行重定向到文件或/ dev/null的应用程序,看看这是否有任何明显的影响; 这将有助于缩小问题所在的范围.
当然,如果printfs没用,为什么它们在循环中呢?
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |