Skip to content

Latest commit

 

History

History
50 lines (27 loc) · 2.64 KB

File metadata and controls

50 lines (27 loc) · 2.64 KB

InfiniOP 统一算子库

简介

InfiniOP 是一个跨平台统一的高性能算子库。它使得开发者可以通过统一的编程接口,使用不同类型的芯片的算力资源进行高性能的算子运算。InfiniOP 统一算子库的编译与使用依赖于 InifiniRT 统一运行时库。

算子计算流程

1. 创建硬件控柄

InfiniOP 使用硬件控柄(infiniopHandle_t)来存储一些算子运算所需要的、与硬件芯片相关的信息。开发者通过创建并传入的相应类型、标识的硬件控柄来告诉算子使用环境中的哪种类型的哪个芯片进行运算。

2. 创建张量描述

当一个算子以高维张量作为输入或输出时,开发者需要使用张量描述(infiniopTensorDescriptor_t)来描述该张量的形状、数据类型、以及数据布局(各维度的步长)信息。

3. 创建算子描述

通过硬件控柄和输入输出的张量描述,创建算子描述。当执行硬件和张量元信息不变时(只有张量数据改变时),可以复用算子描述。

4. 分配工作空间

一些算子需要额外的工作空间来存储中间结果。开发者可以从创建好的算子描述中获取需要的工作空间大小,并分配相应的空间。

5. 计算

通过传入算子描述、输入输出张量描述所对应的张量数据、以及分配好的工作空间、硬件执行流等参数,执行算子计算。

使用 InfiniOP API

错误处理

InfiniOP 的所有API都会返回 InfiniStatus_t,用来表示函数执行的是否成功以及错误的原因。

运行时

InfiniOP 依赖于 InifiniRT 统一运行时库提供的硬件资源管理功能,包括切换设备上下文、分配和释放内存、创建执行流等。使用 InfiniOP 接口并不会自动切换设备上下文。

资源的复用与释放

算子描述、张量描述、硬件控柄都是可以被复用的。开发者应该尽可能的复用这些资源,以避免资源的重复创建带来的冗余开销。当算子计算完成后,开发者可以销毁不再被需要的算子描述、张量描述、硬件控柄。需要注意的是,硬件控柄以及一些算子的算子描述会包含一些计算所需的资源,由于算子的计算可以是异步的,开发者需要自行保证这些资源的销毁发生在计算完成之后,以避免错误行为。

算子列表

详见 InfiniOP算子列表