【问题标题】:What's the difference between tms_utime and tms_stime with the times() function?tms_utime 和 tms_stime 与 times() 函数有什么区别?
【发布时间】:2014-05-30 11:30:18
【问题描述】:

tms_utimetms_stime 到底有什么区别?我指的是 POSIX times() 使用的 struct tms 功能。 utime中是否包含数据缓存时间?数据缓存时间可以单独测量吗?

PS:我使用的是 Linux-Ubuntu。例如,我正在使用我的 C++ 程序求解一个大型稀疏线性方程组。

【问题讨论】:

  • 您可能需要提供更多上下文。 utime 可能是在用户空间执行程序所花费的时间,而 stime 是内核代表您的程序执行工作所花费的时间。但是,这是一个猜测,因为您没有提供足够的上下文来给出一个好的答案。
  • 嗯,我是那种对计算机科学知之甚少的业余程序员。 :) 我需要提供什么样的上下文?我正在运行一个 C++ 程序来进行一些工程模拟。
  • 您需要提供的上下文是您计划从哪里获取 utimestime 值(如果它们是结构成员),或者如果您指的是两个不同的系统调用,或者......如果你想引用函数,在它们的名字后面添加括号很简单(stime()utime()),这将大大有助于消除你所指的歧义。这也是XY Problem。如果您解释了您想要做什么并询问是否有任何一个功能可以帮助您解决这个问题,您会做得最好。
  • utimestime我提到的是tms_utimetms_stime来自<sys/times.h>,请看这个链接:pubs.opengroup.org/onlinepubs/009695399/functions/times.html
  • 好的;有了这个,我的第一条评论(或多或少)是准确的。 tms_utime 元素是执行代码或 C 库中的代码所花费的时间。 tms_stime 元素是内核代表您执行代码所花费的时间。 (tms_cutimetms_cstime 分别是所有已退出子进程的 tms_utimetms_stime 的总和 - 请参阅基本原理评论。)

标签: c++ cpu


【解决方案1】:

鉴于您正在讨论times() 使用的struct tmstms_utimetms_stime 成员(其中包含clock_t 类型的4 个元素),差异如我的第一个和最后一个cmets 所述:

tms_utime 元素是执行代码或 C 库中的代码所花费的时间。 tms_stime 元素是内核代表您执行代码所花费的时间。 (tms_cutimetms_cstime 分别是所有已退出子进程的 tms_utimetms_stime 的总和 - 请参阅基本原理评论。)

没有将时间细分为“等待缓存所花费的时间”与“不等待缓存所花费的时间”。我认为缓存时间将包含在tms_stime 值中,因为当数据不在缓存中时,您将需要系统为您获取它。

【讨论】:

  • 我用我的程序在一个256核的工作模拟上测试,时间不超过0.5s,utime在50s左右。我的程序正在求解一个稀疏线性方程组。所以听起来数据缓存时间包含在 utime 中。
  • 您确定“没有将时间细分为“等待缓存所花费的时间”与“不等待缓存所花费的时间”。”?当我阅读一些关于编写缓存友好代码的文章时,我真的很想知道我的代码对缓存的友好程度。
  • 我 99+% 肯定没有关于 times() 的缓存与非缓存代码的信息。除此之外,它的分辨率不够大(CLOCKS_PER_SEC 通常是 60 或 100)。可能有调用来确定缓存时间与非缓存时间,但它们将是特定于平台的,因此对于不同的平台是不同的。您确实说您使用的是 Ubuntu (Linux),因此您应该查找分析选项。我不需要做那种级别的时间安排。我倾向于只对不同制度下程序的性能进行计时,并且......好吧,我并不经常需要进行这种分析。
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 2020-11-27
  • 2021-10-24
  • 2021-02-14
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
相关资源
最近更新 更多