这是我第一次尝试分析多线程程序。
我怀疑问题是它在等待什么,但我不知道是什么,该程序永远不会达到100%的CPU,GPU,RAM或I / O使用。
直到最近,我还只处理过单线程的项目,或者线程很简单的项目(例如:通常是一个额外的线程,只是为了确保UI在程序运行时没有锁定,或者一旦我做了一个游戏引擎用一个单独的线程来处理.XM和.IT文件音乐,这样主线程可以做任何事情,而另一个核心的另一个线程可以负责解码这些文件。)
这个程序有几个线程,并且它们不对相同的任务进行并行工作,每个线程都有自己完全独立的目的(例如,一个线程专用于处理与OS的所有与声音相关的API调用)。
我下载了Microsoft性能工具,有一个前Valve员工的博客解释说他们可以做到这一点,但是我甚至设法制作了一些配置文件等等,我真的不明白我所看到的,对于我来说,它只是一堆漂亮的图形(除了CPU使用图形,我已经知道在单线程应用程序上进行基于样本的分析),所以,我如何找到程序等待某些东西的原因?或者我如何找到等待的东西?我如何找到阻止其他线程的线程?
答案 0 :(得分:0)
我看作是两件事之间的交替:
a)测量总时间,你需要的只是某种计时器,
b)发现加速,即使很多人被告知,不意味着测量。每当您找到加速时,您都会对结果进行计时并再次进行。 这是交替。 为了找到加速,我和许多人使用的方法是random pausing。 这个想法是,你让程序在调试器下运行并多次手动中断它。 每次,您都会检查每个线程的状态,包括调用堆栈。 它非常粗糙,非常有效。
这样做的原因是程序可以更快地运行的唯一方法是,如果它正在执行可以删除的活动,并且如果这可以节省一定时间,那么您至少可以在每个时间看到它暂停。 无论是在进行I / O,等待某事还是计算,这都有效。 它会查看分析器不会公开的内容,因为它们会生成summaries from which speedups can easily hide。
答案 1 :(得分:0)