实现随机舍入模式时,如何分类x86指令的舍入敏感性?
高效分类x86浮点指令以实现随机舍入模式
我正在用C99实现随机舍入模式,用于评估浮点(FP)计算的数值稳定性。该思路源自一项计算化学研究,现已适配x86_64架构常见的SSE和AVX指令。随机舍入的核心逻辑是:为每条FP指令随机注入汇编指令,将舍入模式设置为向+inf或-inf舍入,通过多次运行程序获取结果的分布样本。
为正确实现该功能,需明确指令的浮点舍入相关属性,目前我将指令分为四类:
- 类别1:与FP完全无关,例如
movq、addq、imulq - 类别2:涉及FP值但无FP计算(或计算不涉及舍入),例如
movss、movaps,或是对FP值执行无舍入的计算,例如orps - 类别3:执行可能涉及舍入的FP计算,且舍入模式在指令中显式指定,例如
roundss - 类别4:执行可能涉及舍入的FP计算,舍入模式由
ldmxcsr或fldcw预先设置的状态隐式决定,例如addss、sqrtss
目前我采用手动方式对汇编指令进行分类,但这种方法效率低且易出错,无法覆盖不同代码或编译设置下的所有指令。因此我想请教以下问题:
- 给定一条x86指令,如何高效将其归入上述四类?
- 是否存在现成的指令分类列表可供使用?
- 在x86指令参考页面中,搜索哪些术语可以自动完成这类分类?
内容的提问来源于stack exchange,提问作者Gordon Kindlmann
相关产品推荐
相关产品推荐

