MSVC 17.1.0中AVX2代码因printf字符串长度导致exp调用性能暴跌
MSVC 17.1.0 AVX2编译下exp/expf性能随printf字符串长度异常波动的问题
问题现象
使用Microsoft C编译器(MSVC 17.1.0)开启AVX2浮点代码生成时,发现异常性能波动:仅修改printf语句中字符串的长度(按8字节倍数调整),调用系统库exp/expf的AVX2代码运行性能会出现3-40倍的暴跌。
复现与验证
- 基于@njuffa的快速互补误差函数测试框架编写了**最小可复现示例(MRE)**代码
- 验证确认:该现象仅在MSVC中出现,GCC和Intel编译器无此问题
额外性能观察
- 内部采用双精度计算的实现,比纯单精度实现快约2倍;但在随机数据场景下,这一优势会明显降低
猜测方向
目前怀疑该问题可能与MMX数据残留、L1缓存未对齐导致流水线停滞有关,但无法确定具体根源。
请求
- 恳请其他MSVC用户复现该现象,并协助分析问题根源
- 寻求提升GCC编译性能的额外参数建议
内容的提问来源于stack exchange,提问作者Martin Brown
相关产品推荐
相关产品推荐

