我使用 openmp 在 c 中编写了一个多线程程序。该程序有大约 400 个并行函数调用。这些函数有一些 printf 函数来打印一些调试信息。我观察到,通过删除这些 printf 函数,程序的运行时间从 1.2 秒增加到 1.6 秒。我一直在观察这些现象。这怎么可能?
问问题
390 次
1 回答
2
并行函数调用是否以任何方式相互依赖?由于您不太可能在 400 个内核上运行它,因此随着各种线程的调度,上下文切换会产生一些开销。printf 可能会导致 CPU 产生(当它写入 stdout 时),并且碰巧它是产生 CPU 的好地方(即,此时它不会阻塞任何其他线程)。
我在一个多进程应用程序上工作,它偶尔会同步写入磁盘。我看到的一件事是,摆脱所有同步写入会提高该过程的速度,但代价是整个系统运行不顺畅。相反,我们只是确保在持有任何信号量锁的同时避免写入。
如果进程总是暂停等待同步写入完成,并且它没有阻塞其他任何东西,那么一切都有机会以非常低的延迟运行,并且整个系统会快很多。
于 2012-07-18T11:59:27.567 回答