deepx IR设计说明

  • 1.除了newtensor以外,其他IR均不创建新的张量,而是引用已有的张量

  • 2.IR的输入输出均使用张量名,而不是张量指针(后期IR可能支持直接用值)

  • 3.命名,t开头为张量名,a开头为参数名,v开头为vector名

  • 4.backward需要指令触发,箭头方向为<-,同时需要指定所有grad张量名

  • 5.这份IR均为基本IR,也就是最基础的IR。如relu这类组合IR(可以用max_scalar实现的),则不会出现在这里

IR列表

单向IR(不支持backward)

IR

说明

例子

例子作用

argset

设置参数

argset@int32 1->a1

设置a1为int32类型,值为1

argset

设置参数

argset@int32 1->a1

设置a2为int32类型,值为2

argset

设置vector参数

argset@int32 1 2 3->vec1

设置vec1为int32类型,值为1 2 3

argset

设置vector参数

argset@int32 0 1 2->vec2

设置vec2为int32类型,值为0 1 2

argdel

删除参数

argdel a

删除a参数

newtensor

创建张量

newtensor@int32 vec1->t1

创建一个int32类型的张量t1,并从vec1中复制数据

deltensor

删除张量

deltensor t1

删除t1张量

constant

tensor初始化-填充固定值

constant@int32 a1->t1

给t1填充固定值,值引用a1

arange

tensor初始化-生成序列

arange@int32 a1 a2>t1

给t1生成序列,从a1开始,步长为a2

uniform

tensor初始化-均匀分布

uniform@int32 a1 a2>t1

给t1生成均匀分布,low为a1,high为a2

双向IR(支持backward)

IR

说明

例子

例子作用

add

矩阵加法

add@float32 t1 t2->t3

t3=t1+t2

add_scalar

矩阵加法

add_scalar@float32 t1 a1->t3

t3=t1+a1,a1为常数

sub

矩阵减法

sub@float32 t1 t2->t3

t3=t1-t2

mul

矩阵乘法

mul@float32 t1 t2->t3

t3=t1*t2

mul_scalar

矩阵乘法

mul_scalar@float32 t1 a1->t3

t3=t1*a1,a1为常数

div

除法

div@float32 t1 t2->t3

t3=t1/t2

div_scalar

除法

div_scalar@float32 t1 a1->t3

t3=t1/a1,a1为常数

mod (还没实现)

取模

mod@float32 t1 t2->t3

t3=t1%t2

mod_scalar (还没实现)

取模

mod_scalar@float32 t1 a1->t3

t3=t1%a1,a1为常数

exp

指数

exp@float32 t1->t3

t3=exp(t1)

sqrt

平方根

sqrt@float32 t1->t3

t3=sqrt(t1)

log

对数

log@float32 t1->t3

t3=log(t1)

sum

规约计算-按dims求和

sum@float32 t1 vec2->t3

t3=sum(t1,dims=vec2),按vec2的维度求和

max

规约计算-按dims求最大值

max@float32 t1 t2->t3

t3=max(t1,t2)

max_scalar

规约计算-按dims求最大值

max_scalar@float32 t1 a1->t3

t3=max(t1,a1),a1为常数

min

规约计算-按dims求最小值

min@float32 t1 t2->t3

t3=min(t1,t2)

min_scalar

规约计算-按dims求最小值

min_scalar@float32 t1 a1->t3

t3=min(t1,a1),a1为常数

backward时,改变箭头方向为<-

IR

说明

例子

例子作用

add

矩阵加法

add@float32 t1(t1_grad) t2(t2_grad)<-t3(t3_grad)

t3=t1+t2,t3_grad=t1_grad+t2_grad

add_scalar

矩阵加法

add_scalar@float32 t1(t1_grad) a1<-t3(t3_grad)

t3=t1+a1,t3_grad=t1_grad

sub

矩阵减法

sub@float32 t1(t1_grad) t2(t2_grad)<-t3(t3_grad)

t3=t1-t2,t3_grad=t1_grad-t2_grad

mul

矩阵乘法

mul@float32 t1(t1_grad) t2(t2_grad)<-t3(t3_grad)

t3=t1t2,t3_grad=t1_gradt2+t1*t2_grad

mul_scalar

矩阵乘法

mul_scalar@float32 t1(t1_grad) a1<-t3(t3_grad)

t3=t1a1,t3_grad=t1_grada1

div

除法

div@float32 t1(t1_grad) t2(t2_grad)<-t3(t3_grad)

t3=t1/t2,t3_grad=t1_grad/t2-t1*t2_grad/t2^2

div_scalar

除法

div_scalar@float32 t1(t1_grad) a1<-t3(t3_grad)

t3=t1/a1,t3_grad=t1_grad/a1

mod (还没实现)

取模

mod@float32 t1(t1_grad) t2(t2_grad)<-t3(t3_grad)

t3=t1%t2,t3_grad=t1_grad%t2

mod_scalar (还没实现)

取模

mod_scalar@float32 t1(t1_grad) a1<-t3(t3_grad)

t3=t1%a1,t3_grad=t1_grad%a1,a1为常数

exp

指数

exp@float32 t1(t1_grad)<-t3(t3_grad)

t3=exp(t1),t3_grad=t1_grad*exp(t1)

sqrt

平方根

sqrt@float32 t1(t1_grad)<-t3(t3_grad)

t3=sqrt(t1),t3_grad=t1_grad/(2*sqrt(t1))

log

对数

log@float32 t1(t1_grad)<-t3(t3_grad)

t3=log(t1),t3_grad=t1_grad/t1

sum

规约计算-按dims求和

sum@float32 t1 vec2<-t3

t3=sum(t1,dims=vec2),按vec2的维度求和

max

规约计算-按dims求最大值

max@float32 t1 t2<-t3

t3=max(t1,t2)

max_scalar

规约计算-按dims求最大值

max_scalar@float32 t1 a1<-t3

t3=max(t1,a1),a1为常数

min

规约计算-按dims求最小值

min@float32 t1 t2<-t3

t3=min(t1,t2)

min_scalar

规约计算-按dims求最小值

min_scalar@float32 t1 a1<-t3

t3=min(t1,a1),a1为常数