一 并行处理技术
并行处理一般是指许多指令得以同时进行的处理模式,并行处理通常是将处理的过程分解成小部分,之后采用多个运算单元并以兵法方式加以解决,本章只讨论使用过个处理器的并行处理技术。通常分为两种,功能并行和数据并行,下面结合视频编解码原理对这两种并行方式做简要的介绍。
二 功能并行
功能并行是指将应用程序划分为相互独立的功能模块,每个模块间可以并行的执行,这种并行方式也被称为流水线型并行,是将各个独立的模块划分给不同的运算单元,各个模块之间通过流水线的方式来进行数据交换和通信,最终再将各个单元串接在一起,功能并行充分利用了时间上的并行性来获得加速的效果,比较适用于硬件实现。
在视频编解码中,我们可以将编解码器划分为各个不同的模块,以解码为例,各个模块映射到不同的运算单元,各自独立执行,完成不同的功能,由前面几章可以知道。H265/HEVC的解码过程可以分为熵解码、反量化
反变换、帧内预测、帧间预测,去方块绿波和杨点自适应补偿等,我们根据这些模块的互相联系和运作机制,可以对他们进行重新划分组合,从而实现功能并行。
功能并行的缺点也是很明显的,由于分配给不同运算单元的功能模块是不同的,因此很容易产生载荷失衡问题,有的运算单元的负载较轻,处理速度较快,而有的运算单元的负载较重,处理速度慢,总体上张哥程序的运行效率就会降低,功能并行还需要在不同的运算单元间进行数据通信,当数据量较大时,需要花费额外的资源来进行存储,另外,功能并行的扩展性较差,由于划分好的模块已经分配给不同的运算单元,在增加或者减少运算单元时,需要对原有的模块进行重新划分和分配。
二 数据并行
数据并行是将数据信息划分为相互独立的部分,每一部分交给不同的运算单元来执行,从而实现并行处理,这种方式下,不同运算单元上执行的程序是相同的,而且处理的是相互独立的数据信息,因此不需要进行运算单元间的通信,如图10.1(b)所示。
H265/HEVC中提供了适于进行数据并行处理的结构单元,如片和Tile,在不同的片和TIle中,数据信息是相互独立的,这样有利于将其分配给不同的运算单元来处理。对于比片和Tile小的划分单元,H265/HEVC支持波前并行处理,Wavefront Parallel Processing, 这是对于相互具有依赖的图像单元进行数据并行处理的方法,针对这种情况,需要通过适当的核间通信来消除数据单元之间的依赖关系,从而使得具有依赖关系的数据单元可以在不同的运算单元中进行处理。
对于数据并行,当数据块数目多于运算单元数目时,各个运算单元均处于持续运行状态,比较容易达到负载均衡,另外,数据并行具有非常好的扩展性,易于软件实现,当数据单元数目增多时,可以很容易的增加运算单元的数目来提升并行速率。
core1 | core1 | core2 | core2 | core3 | core3 | core4 | core4 | ||
core1 | core1 | core2 | core2 | core3 | core3 | core4 | core4 | ||
core1 | core1 | core2 | core2 | core3 | core3 | core4 | core4 | ||
core1 | core1 | core2 | core2 | core3 | core3 | ||||
core1 | core1 | core2 | core2 | ||||||
core1 | core1 |
WPP间隔2列并行