深度学习计算框架综述(十三)HVX 计算优化实践—HVX 编程基础知识

本节主要介绍HVX编程的基础知识以及示例代码,主要是五部分:

Registers: 介绍常用的寄存器

Program Flow: 介绍程序流中常用到的循环、跳转、调用等指令

Software Stack: 介绍软件栈的结构,以及SP、FP、LR等寄存器的正确使用方法

Scalar/Vector Instructions: 介绍常用的标量和向量指令

Sample Code: 结合前三部分的内容实现的示例代码

 

Registers

General registers

我们先看General register(下面我们统称为通用寄存器),Hexagon 处理器一共有32个32-bit 的通用寄存器,R0-R31,其中R29、R30、R31都有别名,分别为:Stack Pointer(SP)、Frame Pointer(FP)、Link Register(LR)。这三个寄存器和函数栈及函数调用有关,SP与FP分别指向函数栈的栈顶和栈底,LR则保存了函数调用的返回地址,在介绍 Software Stack 时我们会详细分析。

R0-R5用于接受函数传参,如果函数的传参超过6个,则超出的参数通过栈来传递。

在汇编函数中使用通用寄存器时,我们需要注意的一点是”保存现场“,”保存现场“指的是:在使用某些寄存器之前,需要将这些寄存器的内容保存起来,使用完后,需要恢复这些寄存器的内容,确保函数返回后这些寄存器的内容不会改变。需要在代码中手动保存的寄存器我们称之为”Callee saved register“,无需手动保存的我们称之为”Caller saved Register“,如下所示,R16-R27以及SP、FP、LR在修改前需要手动保存:

 

Control registers

Control register(下面我们统称为控制寄存器)有很多个,作用各不相同,比如控制程序计数、硬件循环,完整的介绍如下所示:

 

我们通常只会用到Loop Registers

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值