浮子上的原子操作

Eri*_*ner 9 c operating-system kernel atomic atomicity

大多数语言都提供原子int操作的功能(添加,比较和交换等).

为什么不浮动类型?

Not*_*hat 5

让我们从OS /硬件设计的角度来思考浮点原子...

存在原子是因为同步需要它们。大部分同步涉及什么?句柄,标志,互斥锁,自旋锁-实际值无意义的东西,只要每个用户一致且用户之间不同即可。即使对于信号量这样的值更有意义的东西-它仍然是关于计数而不是测量,因此无论我们认为它代表什么,32位值都等于32位。

其次,技术问题。我们可以编程的几乎所有东西都可以进行整数运算。并不是浮点数-当C库正在仿真FP操作时,这些原子将难以实现。即使在硬件中,FP操作通常也将比整数慢,并且谁想要慢锁?FPU本身的设计甚至可能使其难以实现原子操作-例如,如果它挂在协处理器接口上而没有直接访问内存总线的情况。

二分之一,如果我们想要的话float,当然我们也想要double吗?但是double通常存在一个问题,那就是它比机器单词大,排除了许多架构上均匀负载和存储的原子性。

第三,在涉及原子之类的事情时,CPU架构师倾向于实现系统设计人员和OS专业人员所要求的东西,并且OS专业人员通常并不完全喜欢浮点数-愚蠢的额外寄存器要保存,从而减慢了上下文切换的速度...硬件中的更多说明/功能会耗费力量和复杂性,如果客户不希望它们...

简而言之,用例不足,因此没有硬件支持,因此也没有语言支持。当然,在某些体系结构上,您可以滚动自己的原子,并且我想GPU计算可能对主要在浮点硬件上的同步有更多的需求,那么谁知道它会保持这种状态呢?