GPU优化内存调度时的几个原则

最小化内存访问

  1. 减少浪费。比如,当你只需要单通道贴图的时候,不要使用多通道贴图;16bit就可以的时候,不要用32bit;
  2. 避免重复访问。比如,在做一些全屏后效的时候,你所需要的数据可能隔壁线程里面就有。如果你所使用的GPU支持从隔壁偷数据的话,大胆的用;
  3. 用计算代替内存访问。比如一些LUT表格当中的数据,是可以通过计算得到的。在某些情况下(比如为内存访问瓶颈的时候),可能直接计算比使用LUT在总体上效率更高;
  4. 采用压缩。如果你所使用的GPU支持对压缩数据的直接访问,那么使用它。这可以显著减少所需的内存访问带宽;
  5. 使用片上存储空间。现代GPU一般都有一定的片上存储空间。你可以将一些会被频繁访问的数据事先调入这个空间,从而减少对内存的访问;
  6. 采用缓存友好的算法。和CPU一样,GPU内部也有多级高速缓存结构。尽可能避免大范围随机读写,提升缓存命中率,可大大减少对内存读写的带宽。

最大化运算并行

  1. 减少算法复杂度。与CPU不同,GPU当中的寄存器是在Shader执行之前一次性分配好的,在Shader执行期间无法动态调整。因此,减少算法的复杂度可以减少对寄存器的开销,从而允许更多的并行处理;
  2. 减少资源绑定点。资源绑定通常是通过一组被称为标量寄存器的东西来实现的。它们同样是有限的资源。过度开销会使得并行度降低;
  3. 减少对片上存储资源的开销。片上存储资源同样是十分有限的。如果单一线程对片上资源的开销大,那么可以同时执行的线程个数,也就是并行度会降低;
  4. 避免过于简单的算法。过于简单的算法会在很短的时间内执行完毕,而GPU对工作量的分配本身是需要时间的。所以如果Shader执行时间过短,则GPU可能无法及时生成足够的任务量来填充管道,从而造成并行度下降。当算法过于简单的时候,可以考虑将多个处理并在一起;
  5. 避免过于复杂的算法。过于复杂的算法会长时间独占GPU的关键资源,导致其它工作量难以填充。当算法过于复杂的时候,可以考虑将其拆分为多个步骤分别处理;

用并行运算的吞吐量弥补内存访问延迟

  1. 平衡有序利用GPU上的共享资源。一般商用GPU出于成本等考虑,诸如贴图单元、缓存、RB等都会被多个核心共享。保持与硬件设计相同比例的工作量,平衡有序使用这些硬件模块和功能,是高性能的关键。
  2. 将计算隐藏到等待内存读写的区间中。一般来说Shader的编译器会自动为你完成这方面的优化。但是,这也意味着更多的寄存器需要长时间等待数据而无法被同一shader当中的其它代码复用。从而在结果上可能降低并行度,使得GPU并没有充足的工作量可以在等待期间执行。这个平衡的调整往往需要手工进行。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行应用性能优化,可以从多个方面入手,包括 CPU、GPU 以及内存等方面。 一、CPU 优化 1. 优化算法 算法是影响 CPU 性能的最重要因素之一。开发者需要选择高效的算法来实现应用功能。 2. 多线程优化 多线程技术可以将 CPU 负载分担到多个线程上,提高 CPU 利用率。但是,多线程也会带来一些问题,例如线程同步和资源竞争等。因此,开发者需要合理使用多线程技术,避免出现问题。 3. 减少循环次数 循环是 CPU 执行间最长的操作之一。因此,开发者需要尽可能减少循环次数,避免无谓的计算。 二、GPU 优化 1. 减少纹理使用 纹理是 GPU 计算密集型的操作之一。为了减少 GPU 负载,开发者需要尽可能减少纹理的使用。例如,可以将多张小纹理合并成一张大纹理,从而减少纹理切换次数。 2. 硬件加速 现代 GPU 支持硬件加速技术,例如 OpenGL、Vulkan 等。使用这些技术可以大大提高 GPU 渲染速度,但是,开发者需要了解这些技术的使用方法,避免出现问题。 3. 渲染批处理 渲染批处理可以将多个渲染操作合并成一个批处理,从而减少 GPU 负载。例如,可以将多个 UI 控件的渲染合并成一个批处理,从而提高 GPU 渲染速度。 三、内存优化 1. 内存使用监控 开发者需要使用内存使用监控工具来监控应用的内存使用情况,避免出现内存泄漏或内存占用过高的问题。 2. 内存复用 内存复用可以避免频繁的内存分配和释放,从而减少内存占用。例如,可以使用对象池技术来复用对象,避免频繁创建和销毁对象。 3. 内存压缩 内存压缩可以将内存占用降低到最小。例如,可以使用压缩算法来压缩纹理和音频等资源,从而减少内存占用。 综上所述,进行应用性能优化,需要从多个方面入手。除了 CPU、GPU内存等方面,还需要考虑应用的网络请求、I/O 操作和 UI 渲染等方面。只有在全面考虑了这些因素之后,才能够有效地提高应用的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值