Merged
float类型接口性能优化 #6676
xuyiyangAdd on 26 days ago
float类型接口性能优化 #6676
Merged
Pull Request has been successfully merged by CANN-robot.
(Thank you for xuyiyang's contribution.)atomgit-bot
26 days ago Comments:
26 days ago Comments:
变更摘要
本 PR 针对 impl/simt_api/math_functions_impl.h 中的 SIMT 数学函数实现进行优化与调整,主要通过将分支逻辑改写为无分支/选择(SEL)形式、用浮点指数域运算替代数据相关的循环归一化,来减少 warp 内的分歧区域(divergence groups),同时更换部分底层例程(rsqrtf 改为 1.0f / __sqrtf、exp2f 改为 __powf)并调整特殊值处理与边界判定逻辑。
主要改动
__asc_uint_floor_log2与__asc_make_float_from_mantissa无分支化:__asc_uint_floor_log2由循环移位改为借助__float_as_uint读取偏置指数域相减计算floor(log2);__asc_make_float_from_mantissa改为同时计算 normal/subnormal/inf/zero 各候选位模式并用条件选择,移除了原先的多分支结构。__asc_remquo_core长除法重构: 将原来的逐位长除法改为先把除数尾数重缩放至[2^23, 2^24)、以单次比较相减完成整数尾数步,再按指数差用选择式主体完成小数部分迭代。rnorm3df/rhypotf的结果与特殊值处理调整:rnorm3df将 inf/nan/零平方和的提前返回改为统一计算后再对result覆写ASCRT_NAN_F、0.0f、ASCRT_INF_F;两个函数均把rsqrtf替换为1.0f / __sqrtf;rhypotf的 min/max 选择改由比较布尔量统一选取。__internal_euler_gamma_function与__internal_sincospif_core精简:__internal_euler_gamma_function去掉x != 0.0f的分支保护并对x - nearbyintf(x)直接化简,同时用__internal_fp32_scale_2p24缩放替代frexpf/ldexpf的子正规回退;__internal_sincospif_core的整数判定改为基于reduced == 0.0f且象限为偶数。__internal_stirling_and_euler_reflect与sinhf多项式/指数重构: 前者无条件计算 cos/sin 两套象限多项式再按象限选择;sinhf中n的计算由truncf改为floorf,残差指数项由exp2f改为__powf。


Incorrect?
atomgit-bot
26 days ago Comments:
26 days ago Comments:
26 days ago Added label: stat/needs-squash
26 days ago Added label: cann-cla/yes
70 messages are collapsed here。 See more
19 days ago Added label: lgtm
19 days ago Added label: approved
19 days ago Merged pull request
描述
本 PR 针对 impl/simt_api/math_functions_impl.h 中的 SIMT 数学函数实现进行优化与调整,主要通过将分支逻辑改写为无分支/选择(SEL)形式、用浮点指数域运算替代数据相关的循环归一化,来减少 warp 内的分歧区域(divergence groups),同时更换部分底层例程(rsqrtf 改为 1.0f / __sqrtf、exp2f 改为 __powf)并调整特殊值处理与边界判定逻辑。
主要改动
关联的Issue
https://gitcode.com/cann/asc-devkit/issues/1782
测试
--cce-use-fast-math=false: 2320.25
优化前:791.25 优化后:252.00
--cce-use-fast-math=false:
优化前:1259.38 优化后:677.12
--cce-use-fast-math=false: 84.00
优化前:429.00 优化后:389.38
--cce-use-fast-math=false:
优化前:625.12 优化后:565.38
--cce-use-fast-math=false: 432.62
优化前:692.88 优化后:397.88
--cce-use-fast-math=false:
优化前:618.62 优化后:406.50
--cce-use-fast-math=false: 1116.75
优化前:76 优化后:76
--cce-use-fast-math=false:
优化前:507 优化后:102
--cce-use-fast-math=false: 335
优化前:224 优化后:149
--cce-use-fast-math=false:
优化前:1378.12 优化后:725.12
--cce-use-fast-math=false: 1128
优化前:192 优化后:90
--cce-use-fast-math=false:
优化前:199 优化后:90
--cce-use-fast-math=false: 191
优化前:231.25 优化后:133
--cce-use-fast-math=false:
优化前:409.08 优化后:319
--cce-use-fast-math=false: 191
优化前:2106 优化后:1417.12
--cce-use-fast-math=false:
优化前:4102.62 优化后:3051
文档更新
类型标签