asc.language.fwk
GetTPipePtr
get_tpipe_ptr |
创建TPipe对象时,对象初始化会设置全局唯一的TPipe指针。本接口用于获取该指针,获取该指针后,可进行TPipe相关的操作。 |
TBuf
class asc.language.fwk.TBuf(pos: TPosition)
class asc.language.fwk.TBuf(handle: Value)
使用Ascend C编程的过程中,可能会用到一些临时变量。
这些临时变量占用的内存可以使用TBuf数据结构来管理,存储位置通过模板参数来设置,可以设置为不同的TPosition逻辑位置。
TBuf占用的存储空间通过TPipe进行管理,您可以通过InitBuffer接口为TBuf进行内存初始化操作,之后即可通过Get获取指定长度的Tensor参与计算。
TBufPool
class asc.language.fwk.TBufPool(pos: TPosition | None, buf_id_size: int)
class asc.language.fwk.TBufPool(handle: Value)
TPipe可以管理全局内存资源,而TBufPool可以手动管理或复用Unified Buffer/L1 Buffer物理内存,主要用于多个stage计算中Unified Buffer/L1 Buffer物理内存不足的场景。
TBufPool.init_buf_pool |
通过Tpipe::InitBufPool接口可划分出整块资源,整块TbufPool资源可以继续通过TBufPool::InitBufPool接口划分成小块资源。 |
TBufPool.init_buffer |
调用TBufPool::InitBuffer接口为TQue/TBuf进行内存分配。 |
TBufPool.reset |
在切换TBufPool资源池时使用,结束当前TbufPool资源池正在处理的相关事件。 调用后当前资源池及资源池分配的Buffer仍然存在,只是Buffer内容可能会被改写。 可以切换回该资源池后,重新开始使用该Buffer,无需再次分配。 |
TPipe
class asc.language.fwk.TPipe
class asc.language.fwk.TPipe(handle: Value)
TPipe用于统一管理Device端内存等资源,一个Kernel函数必须且只能初始化一个TPipe对象。其主要功能包括:
- 内存资源管理:通过TPipe的InitBuffer接口,可以为TQue和TBuf分配内存,分别用于队列的内存初始化和临时变量内存的初始化。
- 同步事件管理:通过TPipe的AllocEventID、ReleaseEventID等接口,可以申请和释放事件ID,用于同步控制。
TQue
class asc.language.fwk.TQue(pos: TPosition = TPosition.VECIN, depth: int = 1)
class asc.language.fwk.TQue(handle: Value)
流水任务之间通过队列(Queue)完成任务间通信和同步。TQue是用来执行队列相关操作、管理相关资源的数据结构。TQue继承自TQueBind父类。
TQueBind
class asc.language.fwk.TQueBind(src: TPosition | None = TPosition.VECIN, dst: TPosition | None = TPosition.VECIN, depth: int = 0, mask: int = 0)
class asc.language.fwk.TQueBind(handle: Value)
TQueBind绑定源逻辑位置和目的逻辑位置,根据源位置和目的位置,来确定内存分配的位置 、插入对应的同步事件,帮助开发者解决内存分配和管理、同步等问题。
Tque是TQueBind的简化模式。通常情况下开发者使用TQue进行编程,TQueBind对外提供一些特殊数据通路的内存管理和同步控制,涉及这些通路时可以直接使用TQueBind。