已开启
[Requirement|需求建议]: Complex算子AscendC实现贡献 #1
TuYHAAAAAA创建于  2025年11月18日
TuYHAAAAAA
TuYHAAAAAA成员
2025年11月18日 创建

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的数据进行计算。

likedislike
TuYHAAAAAATuYHAAAAAA成员
2025年11月18日 修改了issue 的描述
TuYHAAAAAATuYHAAAAAA成员
2025年11月18日 修改了issue 的描述