优化策略
有一些不会降低视觉质量的优化策略用于提高性能或节省功耗。这些策略通常用于视频编码应用的优化,并具有适当的权衡。
减少调度延迟:批处理允许对各种宏块做一系列的函数调用(例如调用运动估计)。此外,批处理允许在合适的并行处理中采用宏块行级多线程(macroblock-row-level multithreading)。通常,批处理中的所有操作共享相同的内存,从而提高了数据获取速度和缓存命中率。然而,应用程序必须等待批处理中所有宏块完成写入,然后才能从内存读取数据。这会带来很小的延迟,但是该延迟仍然适用于视频流等视频应用。批处理实现的性能优势通常不会牺牲视觉质量,并且还为同时运行的其他工作负载留有足够的空间。
优化闲置时间:通过workload shaping进行主动的电量优化是另一种功耗优化的方法。与最坏情况的设计原理相反,视频编解码器实现框架不仅知道硬件特定的细节,而且还主动调整实现策略以提供最佳的资源利用率。对于传统的无功优化方法,系统仅通过利用可用的空闲时间来调整其执行速度,以适应不断变化的工作负载。在主动优化方案中,可以在给定的时间内改变工作负载的情况,从而节省约50%~90%的电量。在这种情况下,空闲时间在多个数据单元上累积,以便底层处理器可以在更大的空闲时间段内使用更主动的节能方法,例如深度睡眠。此外,通过在可忍受的延迟内对视频帧进行重新排序,也可以节省功耗。使用高级的复杂模型调整工作负载,视频编解码器框架则在运行时解释模型并选择合适的操作频率和电压,从而在不损失质量的情况下,将功耗降至最低。
任务并行化:第5章已经讨论了任务、数据和指令并行化的好处。把独立的任务并行化并将它们调度到多个处理器上可以充分利用处理器的能力。任务并行化可以加速执行速度,并使处理器进入长时间的睡眠状态,从而实现节能。任务管道还可以使资源在必要时保持繁忙,并最大程度地减少资源冲突。此外,通过适当设计并行应用程序,当处理器变得太慢或无响应时,可以将任务重新安排到其他处理器来消除性能瓶颈。对不同处理器的任务指定优先级也有助于提高整体性能。但是,并行化具有潜在的缺点,并行化会增加额外的开销,例如处理器间通信或同步成本。
优化I/O:在选择功耗和处理延迟时,除了在最短的时间内最大程度地利用系统资源之外,提高数据访问速度和降低I/O瓶颈至关重要。在某些离线视频应用程序中(例如基于云的视频分发),当处理器在并行的编码视频片段时,可以使用专用的I/O处理器来获得更好的总体功耗分布。但是,这种技术会导致延迟增加。只有完成所有的处理器都完成编码后,才能将最终的视频码流拼接在一起。因此,由I/O处理器提供的服务的分组数量是一个需要折衷的参数。另外,应该尽可能的利用数据预取和流式传输,视频数据特别适合此类技术。
降低计算量:算法优化允许使用诸如基于阈值的循环而提前退出循环,或利用SIMD的并行性。这些技术有利于降低计算量。但是,这需要非常仔细的分析,才能确定和理解所涉及的各种权衡。在某些情况下,降低计算量有可能会影响到视觉质量。此外,减少执行的指令数量、手工优化代码或使用各种编译器优化技术都会直接影响性能和功耗。
优化成本与收益:需要时刻认真考虑高性能在执行中的复杂性和随之而来的功耗。可能需要重新设计性能优化方法以解决功耗问题。在图像滤波实验中,发现滤波的负载行为和标量与向量的乘法加和的工作负载完全不同,尽管这两个工作负载都具有相似的可并行性。在图像滤波时,由于存在可用的数据复用,因此可能实现性能优化。对于许多视频编码和处理应用程序也是如此。然而,由于不均匀的数据复用和资源调度,图像滤波过程的功耗分布是不规则的。功耗最佳点对应于较大的展开因子,相对适中的阵列分区,流水线乘法器和非流水线循环。较大的展开系数可在合理的带宽需求下最大程度地利用已加载的数据。带宽需求通常在多个周期内摊销,以最大化给定资源的复用和效率。这导致复杂的控制流程和非直观的能源优化设计解决方案。对于这种复杂的工作负载,高性能的设计所带来的功耗增加未必总是合理的。
Last updated