Kernel Primitive API

Kernel Primitive API 对算子 Kernel 实现中的底层代码进行了抽象与功能封装,提供高性能的 Block 级 IO 运算和 Compute 运算。使用 Kernel Primitive API 进行 Kernel 开发可以更加专注计算逻辑的实现,在保证性能的同时大幅减少代码量,同时实现了算子计算与硬件解耦。

本部分为 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。

示例

  • ElementwiseAdd : 加法操作,输入和输出具有相同 Shape。

  • Reduce : 针对最高维进行规约操作。