Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Ascend 系列芯片在使用高bit访存的时候,同样数据量,高bit访存指令数更少,底层性能更好。
本 PR 针对 EmbeddingHashTableLookupOrInsert 算子(arch35)引入 SIMT 访存合并优化:根据 embeddingDim 的对齐情况(dim%4==0 → merge=4、dim%2==0 → merge=2、否则 → merge=1),让每个 X 线程一次搬运 merge 个连续 float,从而在读写嵌入向量时使用 float4(B128)/float2(B64) 短向量代替逐元素标量访问,并同步调整 tiling 的 threadXNum 计算公式(next_pow2(ceil(dim/merge)),上限 WARP_SIZE)及单元测试覆盖。
华为海思
推荐场景,hashTable类算子,带宽bound类算子
simt 宽带提升,SIMT访存性能与单次访存粒度相关,按照最朴素的写法,B32 的访存性能比B16的好一倍,在带宽范围内,b128 > b64 > b32 > b16 > b8。 因此,通常可以将低数据类型合并到高数据类型访问。可以将数据类型提升到b128访存,以便获取到比其他数据类型更好的性能。 (1)按shape数据类型合并: 对shape合轴后,根据last轴的大小合并数据类型。 last_shape 16Byte 对齐并且数据类型小于16Byte, 按照16Byte访存; last_shape 8Byte对齐并且数据类型小于8Byte, 按照8Byte访存; last_shape 4Byte对齐并且数据类型小于4Byte, 按照4Byte访存。 last_shape 2Byte对齐并且数据类型小于2Byte, 按照2Byte访存。 (2)按场景数据类型合并。 如果输入输出数据类型可以合并那直接合并。 如果输入可以合并,输出不可合并,输入按照(1)的原则做数据类型合并,输出按照实际数据类型搬出。 如果输入不可合并输出可合并,那输入按照实际数据类型搬入,输出按照(1)的原则做数据类型合并。
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
Ascend 系列芯片在使用高bit访存的时候,同样数据量,高bit访存指令数更少,底层性能更好。
本 PR 针对 EmbeddingHashTableLookupOrInsert 算子(arch35)引入 SIMT 访存合并优化:根据 embeddingDim 的对齐情况(dim%4==0 → merge=4、dim%2==0 → merge=2、否则 → merge=1),让每个 X 线程一次搬运 merge 个连续 float,从而在读写嵌入向量时使用 float4(B128)/float2(B64) 短向量代替逐元素标量访问,并同步调整 tiling 的 threadXNum 计算公式(next_pow2(ceil(dim/merge)),上限 WARP_SIZE)及单元测试覆盖。
Origin(信息来源)
华为海思
Benefit / Necessity (价值/作用)
推荐场景,hashTable类算子,带宽bound类算子
Design(设计方案)
simt 宽带提升,SIMT访存性能与单次访存粒度相关,按照最朴素的写法,B32 的访存性能比B16的好一倍,在带宽范围内,b128 > b64 > b32 > b16 > b8。
因此,通常可以将低数据类型合并到高数据类型访问。可以将数据类型提升到b128访存,以便获取到比其他数据类型更好的性能。
(1)按shape数据类型合并: 对shape合轴后,根据last轴的大小合并数据类型。
last_shape 16Byte 对齐并且数据类型小于16Byte, 按照16Byte访存;
last_shape 8Byte对齐并且数据类型小于8Byte, 按照8Byte访存;
last_shape 4Byte对齐并且数据类型小于4Byte, 按照4Byte访存。
last_shape 2Byte对齐并且数据类型小于2Byte, 按照2Byte访存。
(2)按场景数据类型合并。
如果输入输出数据类型可以合并那直接合并。
如果输入可以合并,输出不可合并,输入按照(1)的原则做数据类型合并,输出按照实际数据类型搬出。
如果输入不可合并输出可合并,那输入按照实际数据类型搬入,输出按照(1)的原则做数据类型合并。