asc.language.fwk
GetTPipePtr
创建TPipe对象时,对象初始化会设置全局唯一的TPipe指针。本接口用于获取该指针,获取该指针后,可进行TPipe相关的操作。 |
TBuf
- class asc.language.fwk.TBuf(pos: TPosition)
- class asc.language.fwk.TBuf(handle: Value)
使用Ascend C编程的过程中,可能会用到一些临时变量。 这些临时变量占用的内存可以使用TBuf数据结构来管理,存储位置通过模板参数来设置,可以设置为不同的TPosition逻辑位置。 TBuf占用的存储空间通过TPipe进行管理,您可以通过init_buffer接口为TBuf进行内存初始化操作,之后即可通过get获取指定长度的Tensor参与计算。
创建TBuf对象时,初始化数据成员。 |
|
从TBuf上获取指定长度的Tensor,或者获取全部长度的Tensor。 |
|
以TBuf为基地址,向后偏移指定长度,将偏移后的地址作为起始地址,提取长度为指定值的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对象时,初始化数据成员。 |
|
通过Tpipe::InitBufPool接口可划分出整块资源,整块TbufPool资源可以继续通过TBufPool.init_buf_pool接口划分成小块资源。 |
|
调用TBufPool::InitBuffer接口为TQue/TBuf进行内存分配。 |
|
在切换TBufPool资源池时使用,结束当前TbufPool资源池正在处理的相关事件。 调用后当前资源池及资源池分配的Buffer仍然存在,只是Buffer内容可能会被改写。 可以切换回该资源池后,重新开始使用该Buffer,无需再次分配。 |
TPipe
- class asc.language.fwk.TPipe
- class asc.language.fwk.TPipe(handle: Value)
TPipe用于统一管理Device端内存等资源,一个Kernel函数必须且只能初始化一个TPipe对象。其主要功能包括:
内存资源管理:通过TPipe的init_buffer接口,可以为TQue和TBuf分配内存,分别用于队列的内存初始化和临时变量内存的初始化。
同步事件管理:通过TPipe的alloc_event_id、release_event_id等接口,可以申请和释放事件ID,用于同步控制。
构造用来管理内存和同步的TPipe对象。 |
|
用于申请HardEvent(硬件类型同步事件)的TEventID,必须与ReleaseEventID搭配使用,调用该接口后,会占用申请的TEventID,直至调用ReleaseEventID释放。 |
|
释放资源。 |
|
根据HardEvent(硬件类型的同步事件)获取相应可用的TEventID,此接口不会申请TEventID,仅提供可用的TEventID。 |
|
初始化内存和用于同步流水事件的EventID的初始化。 |
|
初始化TBufPool内存资源池。本接口适用于内存资源有限时,希望手动指定UB/L1内存资源复用的场景。本接口初始化后在整体内存资源中划分出一块子资源池。 |
|
用于为TQue等队列和TBuf分配内存。 |
|
用于释放HardEvent(硬件类型同步事件)的TEventID,通常与AllocEventID搭配使用。 |
|
完成资源的释放与eventId等变量的初始化操作,恢复到TPipe的初始化状态。 |
TQue
- class asc.language.fwk.TQue(pos: TPosition = TPosition.VECIN, depth: int = 1)
- class asc.language.fwk.TQue(handle: Value)
流水任务之间通过队列(Queue)完成任务间通信和同步。TQue是用来执行队列相关操作、管理相关资源的数据结构。TQue继承自TQueBind父类。
从Que中分配Tensor,Tensor所占大小为init_buffer时设置的每块内存长度。 |
|
将Tensor从队列中取出,用于后续处理。 |
|
将Tensor push到队列。 |
|
释放Que中的指定Tensor。 |
|
查询Que中已入队的Tensor数量。 |
|
查询Que中是否有空闲的内存块。 |
|
查询Que中目前是否已有入队的Tensor。 |
|
查询队列是否已满。 |
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。
创建TQueBind对象。 |
|
从Que中分配Tensor,Tensor所占大小为init_buffer时设置的每块内存长度。 |
|
将Tensor从队列中取出,用于后续处理。 |
|
将Tensor push到队列。 |
|
释放队列中申请的所有同步事件。队列分配的Buffer关联着同步事件的event_id,因为同步事件的数量有限制, 如果同时使用的队列Buffer数量超过限制,将无法继续申请队列,使用本接口释放队列中的事件后,可以再次申请队列。 |
|
释放Que中的指定Tensor。 |
|
查询Que中已入队的Tensor数量。 |
|
查询Que中是否有空闲的内存块。 |
|
查询Que中目前是否已有入队的Tensor。 |
|
查询队列是否已满。 |