【问题标题】:Measuring time on GPU在 GPU 上测量时间
【发布时间】:2016-06-02 14:05:55
【问题描述】:
我目前正在调查一些抗锯齿方法所花费的时间。我不完全确定如何准确计算着色器计算时间。我是否正确假设如果我进行绘图调用,数据将发送到 GPU。 CPU 继续运行,然后在交换链处等待 GPU 完成。因此准确计算时间将是 RenderAntialiasing() 之前的“StartTimer”和 swapChain->Present(0, 0) 之后的“StopTimer”; ?
否则我的结果会很奇怪。
【问题讨论】:
标签:
c++
time
directx
measurement
【解决方案1】:
This 相当过时的文章让您了解在执行图形性能计时方面存在的一些挑战。
所有基于 CPU 的计时器都可以告诉您操作所需的 CPU 时间,但由于批处理的原因,它可能与您包围的 API 函数几乎没有相关性。因此,您不应尝试对渲染的 CPU 成本进行“微基准测试”,而应使用QueryPerformanceCounter 括起大部分帧。
要获得 GPU 计时,您可以使用 Direct3D 时间戳查询。对于 Direct3D 11,请参阅 D3D11_QUERY_TIMESTAMP_DISJOINT 和 D3D11_QUERY_TIMESTAMP。