【发布时间】:2022-07-20 17:36:41
【问题描述】:
有没有办法在 Unity 中测量给定计算着色器的执行时间?
我想“人为地”在这个计算着色器中添加一个计算缓冲区并在上面创建一个"getData",因为我知道这个函数会阻塞 cpu,直到 gpu 计算结束。但是,作为一种方法,似乎有点粗糙……而且,在这种情况下,如何知道getdata会持续多久?
我尝试的另一个解决方案是使用GraphicsFence 并检查它的passed 属性何时设置为true,但我只能在每帧调用一次的协程中执行此操作,因此估计执行时间将始终大于一帧的持续时间...
【问题讨论】:
-
你无法知道
GetData会有多长时间,但如果你的计算着色器足够长,那么从 GPU 中检索一个字节之类的东西所花费的时间可以忽略不计(你只需付出API 开销) -
我尝试使用
GetData和一个 int,我的调度执行时间是 930 µs 使用这种方法,并使用 renderDoc 的分析器告诉我我的执行时间是 400 µs...您有什么想法来解释这种差异吗?