Kernel Primitive API¶
本部分为 PaddlePaddle 高级开发人员提供了用于 Kernel 开发的 CUDA Kernel Primitive API,该类 API 能够帮助开发者在提升开发效率的同时收获较好的性能。Kernel Primitive API 主要包括 IO API、Compute API以及 OpFunc,IO API 能够高效的完成全局内存与寄存器间的数据读写操作;Compute API 为通用计算函数,如ElementwiseBinary、ElementwiseUnary 等;OpFunc 用于定义 Compute API 中的计算规则,例如实现 Add 操作则需要定义 AddFunctor 用于 ElementwiseBinary 调用,开发者可以直接使用默认的 OpFunc 也可以根据需要进行自定义,具体的实现规则将在 OpFunc 小节中进行详细介绍。当前 API 均是 Block 级别的多线程 API,开发者可以直接传入当前 Block 的数据指针以及操作类型完成相应的计算,目前仅支持全局数据指针和寄存器指针。
API 列表¶
API 名称 |
功能简介 |
---|---|
ReadData |
IO,将数据从全局内存读取到寄存器中。 |
ReadDataBc |
IO,Broadcast 形式的数据读取, 根据当前 Block 的数据偏移和原始输入指针计算输入坐标, 并将输入数据读取到寄存器中。 |
ReadDataReduce |
IO,Reduce 形式的数据读取, 将需要进行规约的数据从全局内存读取到寄存器中。 |
WriteData |
IO,将数据从寄存器写入全局内存中。 |
ElementwiseUnary |
Compute API,输入与输出 Shape 相同的一元计算 API,根据 OpFunc 计算规则完成一元逐元素运算。 |
ElementwiseBinary |
Compute API,输入与输出 Shape 相同的二元计算 API,根据 OpFunc 计算规则完成二元逐元素运算。 |
ElementwiseTernary |
Compute API,输入与输出 Shape 相同的三元计算 API,根据 OpFunc 计算规则完成三元逐元素运算。 |
ElementwiseAny |
Compute API,输入与输出 Shape 相同的多元计算 API,根据 OpFunc 计算规则完成多元逐元素运算。 |
CycleBinary |
Compute API,input1 和 input2 具有不同 Shape, input2 和 output 具有相同 Shape, 根据 OpFunc 计算规则完成二元循环操作。 |
Reduce |
Compute API,根据 Reduce 模式完成数据规约。 |
OpFunc 列表¶
Functor 名称 |
功能简介 |
---|---|
ExpFunctor |
一元 Functor,对输入数据进行 Exp 操作。 |
IdentityFunctor |
一元 Functor,对输入数据进行类型转换操作。 |
DivideFunctor |
一元 Functor,对输入数据除以固定值。 |
SquareFunctor |
一元 Functor,对数据进行 Square 操作。 |
MinFunctor |
二元 Functor,返回输入中的最小值。 |
MaxFunctor |
二元 Functor,返回输入中的最大值。 |
AddFunctor |
二元 Functor,返回输入之和。 |
MulFunctor |
二元 Functor,返回输入的乘积。 |
LogicalOrFunctor |
二元 Functor,返回输入的逻辑或的操作结果。 |
LogicalAndFunctor |
二元 Functor,返回输入的逻辑与的操作结果。 |
DivFunctor |
二元 Functor,返回两数相除的结果。 |
FloorDivFunctor |
二元 Functor,返回两数相除的结果。 |
API 介绍¶
IO API : 介绍 IO 类 API 的定义和功能。
Compute API : 介绍 Compute 类 API 的定义和功能。
OpFunc : 介绍 Kernel Primitive API 提供的 Functor。