由于我在(抢占式)多任务,多核环境中运行多线程程序的性能评估测试,因此可以定期更换该进程.我想计算延迟,即只计算进程处于活动状态的持续时间.这将允许我推断性能在非多任务环境中的表现,即,只有一个程序运行(大多数时间),或者在不同的工作负载上.
通常测量两种时间:
我相信我需要的是单个线程的完成时间,这可能与任何线程使用的最大CPU时间不同,这是由于线程之间的任务依赖性结构.例如,在具有2个线程的进程中,线程1在运行时的前三分之二(CPU时间t)中负载很重,而线程2在该进程的后三分之二中加载(同样,对于CPU时间t).在这种情况下:
此外,多线程本身带来了不确定性.这个问题可能需要多次运行测试并总结结果.
此外,延迟还取决于操作系统如何调度线程; 如果进程的某些线程等待CPU而其他线程运行,则事情会变得更复杂.但是让我们忘记这一点.
有没有一种有效的方法来计算/估计这个完工时间?要提供代码示例,请使用任何编程语言,但最好使用Linux上的C或C++.
PS:我理解这个makepan的定义与调度问题的定义不同.调度问题中使用的定义类似于挂钟时间.
这已经得到了回答,但它是一个C#解决方案.如何在C或C++中执行此操作?
我想测量一下C#例程所需的时间.因为还有很多其他线程我只想计算这一个线程的时间.在Java中我可以使用getCurrentThreadCpuTime.
我该怎么做?
假设我想测量某段代码所花费的时间.为此,我通常会这样做
clock_t startTime = clock();
//do stuff
//do stuff
//do stuff
//do stuff
float secsElapsed = (float)(clock() - startTime)/CLOCKS_PER_SEC;
Run Code Online (Sandbox Code Playgroud)
如果程序是多线程的并且在我想要测量的部分内发生了上下文切换,该怎么办?我如何衡量执行代码所花费的时间,排除在其他线程上花费的时间?即使有工具可以做到这一点,我也非常想知道他们是如何做到的.
我正在寻找 OS 级 API 来解释 OSX 中特定线程消耗的周期。
这类似于这个问题(和答案),但在 OSX 中。
我试图获得总CPU使用率的百分比 label1.Caption
我搜索过并找到了这些:
不起作用 - http://www.vbforums.com/showthread.php?345723-DELPHI-Get-CPU-Usage
不是我需要的 - http://delphi.cjcsoft.net/viewthread.php?tid=42837
这就是我正在做的事情:
我相信有一种简单的方法就像我们使用RAM一样.
GlobalMemoryStatus(RamStats);
Label1.Caption := Format('RAM: %d %%', [RamStats.dwMemoryLoad]);
Run Code Online (Sandbox Code Playgroud)
是否有一个分辨率高于100us的方法可以让我得到一个线程工作的总时间(没有它正在睡觉或等待的时间).
谢谢 :)