Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
UnsortedSegmentProd算子是索引算子,相同索引的数值进行原子乘再输出,原子乘使用atomCas实现,同地址的写请求需要在MATA上排队,是性能瓶颈所在。在推荐网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomCas很差。但是对索引进行排序去重的方式消除核内相同地址的写请求。
vector
补全950上unsorted_segment_prod算子的实现
本次仅实现simt全功能模板。主要思路是先使用simd将输出初始化为1.0(浮点数)或者1(整形),然后使用simt遍历输入,将输入和对应位置的输出使用atomCas求乘积值;由于cas不支持half/bfloat16类型,需要将half/bfloat16类型组装为half2/bfloat16x2_t类型处理。
/assign
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
UnsortedSegmentProd算子是索引算子,相同索引的数值进行原子乘再输出,原子乘使用atomCas实现,同地址的写请求需要在MATA上排队,是性能瓶颈所在。在推荐网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomCas很差。但是对索引进行排序去重的方式消除核内相同地址的写请求。
Origin(信息来源)
vector
Benefit / Necessity (价值/作用)
补全950上unsorted_segment_prod算子的实现
Design(设计方案)
本次仅实现simt全功能模板。主要思路是先使用simd将输出初始化为1.0(浮点数)或者1(整形),然后使用simt遍历输入,将输入和对应位置的输出使用atomCas求乘积值;由于cas不支持half/bfloat16类型,需要将half/bfloat16类型组装为half2/bfloat16x2_t类型处理。