Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
UnsortedSegmentMax算子是索引算子,相同索引的数值进行原子求max再输出,atomicmax同地址的写请求需要在MATA上排队,是性能瓶颈所在。在推荐网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomicmax很差。但是对索引进行排序去重的方式消除核内相同地址的写请求。
vector
在网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomicmax很差。本方案对索引进行排序去重的方式消除核内相同地址的写请求,针对不同场景设计了多种模板适配提升网络性能。
1、归约操作为max,即对属于同一segment的所有元素取最大值; 2、输出初始化为各数据类型的最小值:浮点类型(float32/float16/bfloat16)初始化为负无穷(-inf),有符号整型(int32/int64)初始化为该类型的最小值(如INT32_MIN=-2147483648),无符号整型(uint32/uint64)初始化为0; 3、核间归约使用AtomicMax操作,将多核结果在GM上原子求最大值; 4、核内归约使用SIMD向量Max指令或SIMT标量比较取大值;
/assign
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
UnsortedSegmentMax算子是索引算子,相同索引的数值进行原子求max再输出,atomicmax同地址的写请求需要在MATA上排队,是性能瓶颈所在。在推荐网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomicmax很差。但是对索引进行排序去重的方式消除核内相同地址的写请求。
Origin(信息来源)
vector
Benefit / Necessity (价值/作用)
在网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomicmax很差。本方案对索引进行排序去重的方式消除核内相同地址的写请求,针对不同场景设计了多种模板适配提升网络性能。
Design(设计方案)
1、归约操作为max,即对属于同一segment的所有元素取最大值;
2、输出初始化为各数据类型的最小值:浮点类型(float32/float16/bfloat16)初始化为负无穷(-inf),有符号整型(int32/int64)初始化为该类型的最小值(如INT32_MIN=-2147483648),无符号整型(uint32/uint64)初始化为0;
3、核间归约使用AtomicMax操作,将多核结果在GM上原子求最大值;
4、核内归约使用SIMD向量Max指令或SIMT标量比较取大值;