加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Hexagon处理器的一些特殊操作

发布时间:2020-12-14 02:40:34 所属栏目:大数据 来源:网络整理
导读:Hexagon处理器的一些特殊操作 作为数据处理部分的一个补充,本章将具体介绍Hexagon在面对实际处理算法或编码格式时所提供的方案,本文将从三个方面:H.264,IP 网络总和校验码,软件无线电来展示Hexagon处理器在处理数据时的强劲性能。 H.264的CABAC处理 H.2

Hexagon处理器的一些特殊操作
作为数据处理部分的一个补充,本章将具体介绍Hexagon在面对实际处理算法或编码格式时所提供的方案,本文将从三个方面:H.264,IP 网络总和校验码,软件无线电来展示Hexagon处理器在处理数据时的强劲性能。
H.264的CABAC处理
H.264在多媒体应用中有非常广的应用如:
? HD-DVD
? HDTV 广播
CABAC(ContextAdaptive Binary Arithmatic Coding)是 H.264/MPEG-4AVC中使用的熵编码算法。CABAC在不同的上下文环境中使用不同的概率模型来编码。CABAC是H.264简介中明确定义的两种熵算法之一。CABAC通过非常复杂的计算度来提供超凡的编码效率。Hexagon处理器包括了一套精密的指令来支持CABAC解码
二进制算术编码基于递归间隔分治,其状态由两种数量所决定
? 当前的间隔范围
? 当前代码间隔中的偏移量
偏移是从比特流中所解码出来的。在解码一个二进制时,间隔范围基于LPS的概率估计被分为两个间隔:一个间隔具有rLPS = range x pLPS的长度,而另外一个具有 rMPS = range x pMPS = range -rLPS的长度,其中LPS代表最小几率符号(Least Probable Symbol)

这里写图片描述


Arithmetic decoding for one bin
在H.264中,范围有9位长,而偏移量在一般模式下占9位,在触发模式下有10位。rLPS的计算大约是根据64*4个256比特,范围与上下文状态在地址中定义用来检查表格。为了保持整个解码过程的精度,新的范围必须被重归一化从而保证最重要的那一位为1.而且偏移能从比特流中异步填充,为了简化重归一化以及重填充过程,下面的解码框图可以显著的减少重归一化和重填充的频率,这也能使DSP的实现更加简单。

这里写图片描述


这里写图片描述


通过使用decbin指令,Hexagon处理器可以在两个周期内解码一个常用的二进制
例如:

INPUT: Rss and Rtt register pairs as:
Rtt.w1[5:0] = state
Rtt.w1[8] = valMPS
Rtt.w0[4:0] =  bitpos
Rss.w0 = range
Rss.w1 = offset
OUTPUT: Rdd register pair is packed as
Rdd.w0[5:0] = state
Rdd.w0[8] = valMPS
Rdd.w0[31:23] = range
Rdd.w0[22:16] = '0'
Rdd.w1 = offset (normalized)
OUTPUT: P0 
P0 = (bin)

代码展示:
H264CabacGetBinNC:

/**************************************************************** * Non-conventional call:     
* 输入: R1:0 = 偏移量 : 范围,R2 = dep,R3 = ctxIdx,* R4 = (*ctxIdx),R5 = bitpos        
* * Return: 
* R1: 0 - offset : range 
* P0 - (bin)
*****************************************************************/
// Cycle #1 
{ R1:0= decbin(R1:0,R5:4)   // 解码一个二进制 
  R6 = asl(R22,R5)          // 此处 R22 = 0x100
}
// Cycle #2 
{  memb(R3) = R0             // 将上下文保存至 *ctxIdx
   R1:0 = vlsrw(R1:0,R5)    // 重新对其范围以及偏移量
   P1 = cmp.gtu(R6,R1)      //是否需要重填充? i.e.,P1= (range<0x100)  IF (!P1.new) jumpr:t LR // return }

IP 网络总和校验码
实现网络总和校验码有如下关键点:
? 总和检验码可以以任何顺序来相加
? 可以使用任何大于尺寸的累加器来相加,并且能在任何时候加回累加器
使用标准数据处理指令,网络总和校验位可以在总循环中一个周期处理八个字节,通过导入字以及累加双字。在循环后,高位字被加到低位字;然后高位半字被加入到低位半字
Hexagon 处理器支持一种专用的指令(vradduh),这使得网络总和校验位可以每周期处理16个字节。
Vradduh指令接受两个输入矢量的半字,相加以及把结果放到32位的目标寄存器中。这个操作可以被用来计算16字节的输入总和以及在计算的最后累加。
代码案例

.text
.global fast_ip_check
// 假设数据为八位对其
// 输入R0指向数据
// 输入R1代表数据长度
// 在R0中返回数据
fast_ip_check:
{
R1 = lsr(R1,#4) // 16字节块
R9:8 = combine(#0,#0)
R3:2 = combine(#0,#0)
}
{ loop0(1f,R1) R7:6 = memd(R0+#8)
R5:4 = memd(R0++#16)
} .falign 1:
{
R7:6 = memd(R0+#8)
R5:4 = memd(R0++#16)
R2 = vradduh(R5:4,R7:6)    // 累加半字节
R8 = vradduh(R3:2,R9:8)   
}: endloop 0
// drain pipeline
{R2 = vradduh(R5:4,R7:6)
R8 = vradduh(R3:2,R9:8)
R5:4 = combine(#0,#0)}
{R8 = vradduh(R3:2,R9:8)
R1 = #0}
{R0 = vradduh(R5:4,R9:8)}
{R0 = vradduh(R5:4,R1:0)}
{R0 = not(R0) jumpr LR }

软件无线电
Hexagon处理器包括了六个特殊目的的指令用来支持软件无线电的实现,这些指令可以显著地加速如下的算法
? Rake解扩
? Scramble代码生成
? 多项式场处理
Rake despreading
在Rake dispreading中,一个重要的操作就是PN乘法。下图显示了用来实现操作的vrcrotates操作。产生的积被累加从而形成一个32位的复杂符号

这里写图片描述


多项式操作
多项式乘法指令支持如下的选项
? Scramble指令生成
? 加密算法
? CRC检验
? 卷积编码
? RS码
这种指令的四个版本都支持32X32以及向量16x16位的乘法
下图显示了pmpy指令的操作信息
Rxx += vpmpyh(Rs,Rt)

这里写图片描述

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读