Closed
[Requirement|需求建议]: A5 UB 单算子场景支持2D和Batch异步拷贝 #372
czwaysAdd on  Apr 16Closed at  May 22
czways
czwaysCollaborators
Apr 16 Create

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

  1. 针对该需求的是要要采用 UB Doorbell模式 对应的SQE_TYPE是RT_DAVID_SQE_TYPE_UBDMA
  2. 在进行异步拷贝task初始化时,需要通过调用驱动接口CreateAsyncDmaWqe2D/CreateAsyncDmaWqeBatch下发wqe, 驱动会返回本次处理了多少内存拷贝
  3. 由于一次2D拷贝需要的WQE可能超过jetty的剩余可用深度,因此调用驱动CreateAsyncDmaWqe2D/CreateAsyncDmaWqeBatch接口返回的fixedSize代表本次2D/Batch拷贝累计已下发了多少size数据量对应的wqe
  4. 我们这个需求在实现时需要根据fixedSize,判断本次2D异步拷贝对应的wqe是否全部下发到JFS队列,判断方法为width*height是否大于fixedSize, 对于Batch异步场景, 数组元素size是否大于拷贝的数组元素个数,如果大于,代表还有剩余数据没有组装wqe,
  5. 我们根据调用驱动CreateAsyncDmaWqe2D/CreateAsyncDmaWqeBatch接口返回的jettyId,functionId,Pi等字段构造 UB Doorbell对应的SQE_TYPE是RT_DAVID_SQE_TYPE_UBDMA的sqe下发到RTSQ
  6. 如果基于步骤4的判断还有剩余的数据没有组装wqe,我们需要在本次的2D异步拷贝过程中进行一次流同步,等待前面的任务完成,这样在任务资源回收流程中调用DestroyAsyncDmaWqe2D/DestroyAsyncDmaWqeBatch,
    传入之前调用驱动CreateAsyncDmaWqe2D/CreateAsyncDmaWqeBatch返回的pi值,回收已经下发并且已经执行完的WQE, 然后再次调用DestroyAsyncDmaWqe2D/DestroyAsyncDmaWqeBatch,传入之前返回的fixedSize,让驱动为剩余数据组装wqe, 然后我们再下发UBDMA SQE,如此循环处理,直到用户传入的2D拷贝数据都下发完WQE为止,所以这里需要循环操作

Origin(信息来源)

NA

Benefit / Necessity (价值/作用)

Design(设计方案)

likedislike
czwaysczwaysCollaborators
Apr 16 changed custom category from 任务 to 需求
czways
czwaysCollaborators
Apr 16 Comments:

/assign

likedislike
CANN-robotCANN-robotCollaborators
Apr 16 Assign czways as responsible person
czwaysczwaysCollaborators
Apr 16 Associated pull request
czwaysczwaysCollaborators
Apr 29 Modify description of issue
wangtaoCollaborators
May 22 Comments:

@czways
请刷新需求进展,如果已完成,请关闭issue

likedislike
czwaysczwaysCollaborators
May 22 changed custom state from 待办的 to 已完成
czwaysczwaysCollaborators
May 22 Close issue
CANN-robotCANN-robotCollaborators
May 22 Added label: resolved