【问题标题】:When can the rounding mode of the CPU change?CPU的舍入模式什么时候可以改变?
【发布时间】:2012-05-07 18:23:03
【问题描述】:

在相当多的文章中,他们建议使用fistp 指令快速转换float->integer。这取决于 CPU 的当前舍入模式,因此您必须进行设置。

但是这种舍入模式可以在程序运行期间被其他程序改变吗?通过操作系统?

更糟糕的是,这是一种可能的情况(伪代码)吗?

set_rounding_mode(ROUND_TRUNCATE);
/* process gets switched out and other process sets the rounding mode to round */
int x = round_with_fistp(0.6);
printf("%d\n", x); // prints 1

【问题讨论】:

  • 我认为答案是否定的。浮点模式是必须跨上下文切换保存的众多内容之一。

标签: c x86 floating-point context-switch


【解决方案1】:

没有一个健全的通用操作系统会在进程和线程之间共享舍入模式。它只应在线程请求它时更改,并且更改应仅对该线程本地。但是,您可能会遇到某些库(尤其是第 3 方)更改它,有时(或总是)无法恢复它并迫使您实施变通方法。

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 2011-02-24
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多