使用AscendC对Complex算子进行实现,实现了AscendC实现的Mul算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。
哈工大算子团队
Complex算子的主要功能是计算给定复数的实部和虚部,将其组成一个复数。在数学和工程领域中,拼接复数是一种基础且重要的操作,它被广泛应用于图像处理、信号处理、物理模拟等多个领域。Complex算子能够高效地处理批量数值的复数拼接,支持浮点数的输入。实现了Complex算子的AscendC实现。
如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 数据量当能单核处理的情况下使用单核,否者使用满核进行加速处理。
使用双缓冲,并充分使用UB空间的原则。 由于没有借助临时空间,且输入输出的形状相同,将UB等分为3等分,每一等分对应一个输入或者输出。 以块为单位,充分利用每一等分的UB空间。
需要tilingkey的情况:需要感知host侧信息对kernel侧走不同分支。 不需要tilingkey的情况:host侧的处理是通用的,无特殊属性等决定kernel的分支。
进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 1)考虑了在最后一次Process中的尾块处理。 2)由于支持Ascend C开发的硬件中AscendC::Mul支持float32和float16数据的输入,可以直接将float16和float32的数据进行计算。
Backgroud(背景信息)
使用AscendC对Complex算子进行实现,实现了AscendC实现的Mul算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。
Origin(信息来源)
哈工大算子团队
Benefit / Necessity (价值/作用)
Complex算子的主要功能是计算给定复数的实部和虚部,将其组成一个复数。在数学和工程领域中,拼接复数是一种基础且重要的操作,它被广泛应用于图像处理、信号处理、物理模拟等多个领域。Complex算子能够高效地处理批量数值的复数拼接,支持浮点数的输入。实现了Complex算子的AscendC实现。
Design(设计方案)
host侧设计:
1)分核策略
如果核间能均分,可视作无大小核区分,大核小核数据块一致;
如果核间不能均分,需要将余出的数据块分配到前几个核上。
数据量当能单核处理的情况下使用单核,否者使用满核进行加速处理。
2)单core内切分策略
使用双缓冲,并充分使用UB空间的原则。
由于没有借助临时空间,且输入输出的形状相同,将UB等分为3等分,每一等分对应一个输入或者输出。
以块为单位,充分利用每一等分的UB空间。
3)tilingkey规划策略
需要tilingkey的情况:需要感知host侧信息对kernel侧走不同分支。
不需要tilingkey的情况:host侧的处理是通用的,无特殊属性等决定kernel的分支。
kernel侧设计:
进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。
1)考虑了在最后一次Process中的尾块处理。
2)由于支持Ascend C开发的硬件中AscendC::Mul支持float32和float16数据的输入,可以直接将float16和float32的数据进行计算。