![]() |
1
5
这种方法有几个问题: 1) 您真的想知道在大多数情况下,命令缓冲区内的GPU端延迟是多少,而不是CPU的往返时间。最好将其测量为运行20个着色器实例和10个着色器实例之间的时间差。然而,这种方法可能会增加噪声,因为误差是与两个测量值相关的误差之和。
3) 如果您按计划启动时钟,并在完成时停止,但GPU正忙于运行其他工作,那么您所用的时间包括花费在其他工作负载上的时间。如果GPU不忙,则会出现(2)中描述的时钟下降问题。 这个问题比我处理过的大多数基准测试案例要困难得多,我做了很多性能测量。
|
![]() |
2
4
您可以将已调度和已完成的处理程序块添加到命令缓冲区。您可以在每个中获取时间戳并进行比较。因为这些块是在CPU上执行的,所以会有一些延迟,但这应该会让你接近。
在Metal 2.1中,Metal现在提供了“事件”,这更像是其他API中的围栏。(名称
这仍然存在延迟等问题(如Ian Ollmann所述),但比命令缓冲区调度和完成更细粒度。特别是,正如克拉斯在评论中提到的那样,正在调度的命令缓冲区并不表示它已经开始执行。您可以在命令序列的开始和结束(使用不同的值)放置命令来设置事件的值,这些命令只会在实际执行时发出通知。
|
![]() |
vtruant · yuv10位金属纹理 7 年前 |
![]() |
Tricky · 金属最佳实践:三重缓冲–纹理? 7 年前 |
![]() |
DocForNoc · 金属文件作为iOS框架的一部分 7 年前 |
![]() |
zzyzy · 如何交错内核/顶点金属着色器 7 年前 |
![]() |
Anna Kuzmina · 检测视频流中的皮肤 7 年前 |
![]() |
zzyzy · 金属内核着色器不工作 7 年前 |
![]() |
SurvivalMachine · 如何在金属上测量GPU时间? 7 年前 |