我看到很多线程询问经过时间(挂起时间)小于用户+内核时间的情况,并且我理解多线程如何导致这种情况。但是,通过以下方式计时执行某些MPI代码时:
$ time mpirun -n 4 ./a.out
我看到的时间范围为4-5分钟,用户时间约为40秒,内核时间约为40秒。我认为进程之间的屏障同步可能是原因的一部分,或者可能只是获取有关单个MPI进程的信息,但我仍然无法合理确定导致我的读数的原因。任何人都可以解释一下吗?
非常感谢。
答案 0 :(得分:3)
对于许多进程,我希望挂钟时间大大超过总CPU时间。很少有进程受CPU限制,所以他们会花很多时间等待。幸运的是,等待时间不再对该过程负责。导致等待的事情:
即使是重型统计软件也可能会进行I / O操作,这会导致CPU利用率低于挂钟时间。
一个极端的例子是将大文件从磁盘上的一个分区复制到同一磁盘上的另一个分区。这可能需要大量的Wall时间和很少的CPU时间。如果您能够使用ionice
,那么如果磁盘忙于其他工作,则可以使Wall时间更长。
以下命令可能会显示比用户和系统时间组合明显更高的实际(挂钟)时间。
time bash -c "read ans"
答案 1 :(得分:1)
用户/内核时间仅在处理器使用时递增。如果您的代码主要等待磁盘或网络IO之类的东西,则实际经过的时间将远远大于CPU时间。