编写大量printf函数会减少程序的运行时间

时间:2012-05-14 20:01:46

标签: c openmp

我使用openmp在c中编写了一个多线程程序。该程序有大约400个并行函数调用。这些函数有一些printf函数来打印一些调试信息。我观察到通过删除这些printf函数,程序的运行时间从1.2秒增加到1.6秒。我一直在观察这些现象。这怎么可能?

1 个答案:

答案 0 :(得分:2)

并行函数调用是否以任何方式相互依赖?由于您不太可能在400个核心上运行此操作,因此在上下文切换中会有一些开销,因为各种线程都会被调度。 printf可能导致产生CPU(当它写入stdout时),并且很可能它是一个产生CPU的好地方(即它不会阻止任何其他线程)。

我处理多进程应用程序,偶尔会同步写入磁盘。我所看到的一件事是,摆脱所有同步写入会增加该过程的速度,但代价是整个系统运行不顺畅。相反,我们只是确保在保持任何信号量锁定时避免写入。

如果进程总是暂停等待同步写入完成,并且如果它不阻止其他任何事情,那么一切都有机会以非常低的延迟运行,并且整个系统要快得多。 / p>