CANN/pyasc框架编程接口
【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyascasc.language.fwkGetTPipePtrget_tpipe_ptr创建TPipe对象时对象初始化会设置全局唯一的TPipe指针。本接口用于获取该指针获取该指针后可进行TPipe相关的操作。TBufclassasc.language.fwk.TBuf(pos: TPosition)classasc.language.fwk.TBuf(handle: Value)使用Ascend C编程的过程中可能会用到一些临时变量。 这些临时变量占用的内存可以使用TBuf数据结构来管理存储位置通过模板参数来设置可以设置为不同的TPosition逻辑位置。 TBuf占用的存储空间通过TPipe进行管理您可以通过InitBuffer接口为TBuf进行内存初始化操作之后即可通过Get获取指定长度的Tensor参与计算。TBuf.get从TBuf上获取指定长度的Tensor或者获取全部长度的Tensor。TBuf.get_with_offset以TBuf为基地址向后偏移指定长度将偏移后的地址作为起始地址提取长度为指定值的Tensor。TBufPoolclassasc.language.fwk.TBufPool(pos: TPosition | None, buf_id_size: int)classasc.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无需再次分配。TPipeclassasc.language.fwk.TPipeclassasc.language.fwk.TPipe(handle: Value)TPipe用于统一管理Device端内存等资源一个Kernel函数必须且只能初始化一个TPipe对象。其主要功能包括内存资源管理通过TPipe的InitBuffer接口可以为TQue和TBuf分配内存分别用于队列的内存初始化和临时变量内存的初始化。同步事件管理通过TPipe的AllocEventID、ReleaseEventID等接口可以申请和释放事件ID用于同步控制。TPipe.alloc_event_id用于申请HardEvent硬件类型同步事件的TEventID必须与ReleaseEventID搭配使用调用该接口后会占用申请的TEventID直至调用ReleaseEventID释放。TPipe.destroy释放资源。TPipe.fetch_event_id根据HardEvent硬件类型的同步事件获取相应可用的TEventID此接口不会申请TEventID仅提供可用的TEventID。TPipe.init初始化内存和用于同步流水事件的EventID的初始化。TPipe.init_buf_pool初始化TBufPool内存资源池。本接口适用于内存资源有限时希望手动指定UB/L1内存资源复用的场景。本接口初始化后在整体内存资源中划分出一块子资源池。TPipe.init_buffer用于为TQue等队列和TBuf分配内存。TPipe.release_event_id用于释放HardEvent硬件类型同步事件的TEventID通常与AllocEventID搭配使用。TPipe.reset完成资源的释放与eventId等变量的初始化操作恢复到TPipe的初始化状态。TQueclassasc.language.fwk.TQue(pos: TPosition TPosition.VECIN, depth: int 1)classasc.language.fwk.TQue(handle: Value)流水任务之间通过队列Queue完成任务间通信和同步。TQue是用来执行队列相关操作、管理相关资源的数据结构。TQue继承自TQueBind父类。TQue.alloc_tensor从Que中分配TensorTensor所占大小为InitBuffer时设置的每块内存长度。TQue.deque将Tensor从队列中取出用于后续处理。TQue.enque将Tensor push到队列。TQue.free_tensor释放Que中的指定Tensor。TQue.get_tensor_count_in_que查询Que中已入队的Tensor数量。TQue.has_idle_buffer查询Que中是否有空闲的内存块。TQue.has_tensor_in_que查询Que中目前是否已有入队的Tensor。TQue.vacant_in_que查询队列是否已满。TQueBindclassasc.language.fwk.TQueBind(src: TPosition | None TPosition.VECIN, dst: TPosition | None TPosition.VECIN, depth: int 0, mask: int 0)classasc.language.fwk.TQueBind(handle: Value)TQueBind绑定源逻辑位置和目的逻辑位置根据源位置和目的位置来确定内存分配的位置 、插入对应的同步事件帮助开发者解决内存分配和管理、同步等问题。 Tque是TQueBind的简化模式。通常情况下开发者使用TQue进行编程TQueBind对外提供一些特殊数据通路的内存管理和同步控制涉及这些通路时可以直接使用TQueBind。TQueBind.alloc_tensor从Que中分配TensorTensor所占大小为InitBuffer时设置的每块内存长度。TQueBind.deque将Tensor从队列中取出用于后续处理。TQueBind.enque将Tensor push到队列。TQueBind.free_all_event释放队列中申请的所有同步事件。队列分配的Buffer关联着同步事件的eventID因为同步事件的数量有限制 如果同时使用的队列Buffer数量超过限制将无法继续申请队列使用本接口释放队列中的事件后可以再次申请队列。TQueBind.free_tensor释放Que中的指定Tensor。TQueBind.get_tensor_count_in_que查询Que中已入队的Tensor数量。TQueBind.has_idle_buffer查询Que中是否有空闲的内存块。TQueBind.has_tensor_in_que查询Que中目前是否已有入队的Tensor。TQueBind.vacant_in_que查询队列是否已满。【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考