【发布时间】:2016-10-30 22:58:53
【问题描述】:
我有一个内核函数(计算着色器),它从纹理中读取像素的附近像素,并根据旧的附近像素值更新当前像素的值(这不是简单的卷积)。
我尝试使用BlitCommandEncoder 创建纹理副本,并为内核函数提供 2 个纹理 - 一个是只读的,另一个是只写的。不幸的是,这种方法在 GPU 方面非常耗时。
在更新其内容的同时从纹理读取旧值的最有效(GPU 和内存方面)方法是什么?
【问题讨论】:
-
您是否使用 Time Profiler(在仪器中)和 GPU 帧捕获(在 Xcode 中)分析了您的应用程序?确定您在分配资源、复制和运行内核上花费了多少时间将帮助您确定首先要优化什么。
-
@warrenm 感谢您的回复。事实证明,使用
BlitCommandEncoder的例程正在调用另一个耗时的函数,这导致了延迟,Blit 操作不是延迟的主要来源——这是我的错。但是,在查看 GPU 帧捕获时,我发现没有提到 Blit 操作的持续时间(与 Compute 操作相反)——有没有办法测量这些(或者我错过了什么)? -
我不认为目前有一种方法可以在 GPU 帧捕获中捕获计算编码器持续时间,抱歉。
标签: ios shader texture2d metal