我看到很多线程询问运行时间(挂起时间)小于user+kernel时间的情况,我理解多线程是如何导致这种情况的。但是,当通过以下方式对某些MPI代码的执行进行计时时:
$ time mpirun -n 4 ./a.out
我看到的运行时间从4-5分钟不等,用户时间约为40秒,内核时间约为40秒。我在想,进程之间的屏障同步可能是部分原因,或者可能是时间只能获得关于单个MPI进程的信息,但我仍然无法确切地解释是什么导致了我的读数。有谁能解释一下吗?
非常感谢。
发布于 2011-08-03 09:11:39
对于许多进程,我预计挂钟时间会大大超过总CPU时间。很少有进程受CPU限制,因此它们将花费大量时间等待。幸运的是,等待时间不再计入进程的费用。导致等待的事情:
任何类型(磁盘、网络、进程间管道、分配给其他进程的processes.
即使是繁重的统计软件也可能进行I/O,这将导致CPU利用率低于时钟时间。
一个极端的例子是将一个大文件从磁盘上的一个分区复制到同一磁盘上的另一个分区。这会占用大量的挂载时间和很少的CPU时间。如果您能够使用ionice,则可以在磁盘忙于其他工作时设置更长的挂起时间。
下面的命令显示的实际(挂钟)时间可能比用户时间和系统时间的总和要高得多。
time bash -c "read ans"发布于 2011-08-03 09:06:33
用户/内核时间仅在处理器使用时递增。如果您的代码主要在等待诸如磁盘或网络IO之类的东西,则实际运行时间将远远大于CPU时间。
https://stackoverflow.com/questions/6920504
复制相似问题