计算机是如何保证计算结果的正确性

20 天前
 tt83

一直挺好奇 cpu 里那么多晶体管,内存数据存在高低电压中。每天在千亿万亿次计算中有没有可能出错,例如某一个 0 被当成 1 ,只要某一个位出错可能出现连锁反应导致整个计算结果的出错,计算机有没有机制保证或者察觉到这种出错。如果存在这种可能是不是你银行的钱就可能多一个 0 或少一 0 ,这种出错概率是多少。

这里大多数人应该都是做软件的,可能平常也不会去想这些底层硬件是如何去保证计算的正确性。

3645 次点击
所在节点    硬件
38 条回复
GiggleSmile
20 天前
xibeifeng
20 天前
计算机组成原理?好像记得硬件是进行补码加法运算,然后会有各种校验码方法,什么 crc 、海明码保证运算结果正确,好像是这么回事
liprais
20 天前
"这里大多数人应该都是做软件的,可能平常也不会去想这些底层硬件是如何去保证计算的正确性。"
问问题还不忘扣帽子,真是 xx 的好学生
tt83
20 天前
@xibeifeng 当年就没学懂😓
TrackBack
20 天前
你要是我 10 岁的侄子问出来我会夸你有探索精神
你在这里问我只能说本科没好好上课就回去翻书
tt83
20 天前
@GiggleSmile 看回答就是会出错,只是概率低极低
tt83
20 天前
@liprais 你想表达什么,一个纯技术问题的背景假设你也能往政治上面扯?
tt83
20 天前
@TrackBack 本科确实没上过
deepblue1
20 天前
学计算机(软硬件)的不学计算机组成原理吗 这不是软件必修课
psyche
20 天前
op 不是科班的,还是上课摸鱼了?
a949690645
20 天前
不想回答就不要回,为什么总是高高在上的感觉呢,难道因为这是一个很简单的问题大家就不去提问了吗?
mobpsycho100
20 天前
关键词: CPU post-validation
me1onsoda
20 天前
事实上计算机计算并不保证正确,精度缺失溢出等等,或者干脆说它压根就没有在计算,纯粹的在进行异或进位等操作。再追根究底下去就需要电路相关的知识了,这种人才应该在做半导体芯片的工作
ryd994
20 天前
“例如某一个 0 被当成 1 ”
所以需要 ecc 内存

“计算机有没有机制保证或者察觉到这种出错” 有,而且有很多。ECC 内存、CPU cache 也是 ECC 的。CPU 本身在发售前就要大量的验证,但仍然可能有 bug 。一些 bug 可以通过微码更新修复,一些 bug 无法修复就只能屏蔽功能或召回。Intel 的处理器白皮书你可以去看看,有很多勘误才是正常的。

对于要求极高可靠性的情况(比如火箭控制)可以使用多机同步计算投票的办法做最终的纠错。

“你银行的钱就可能多一个 0 或少一 0 ,这种出错概率是多少”
可能性很大但也很小。很大是说这种错误在底层很常见。很小是说这种信号错误经过层层纠错,影响结果的概率几乎没有。而且银行内部的流程设计就包括了各种容错机制。毕竟别说计算机可能出错,人更可能出错。人出错的概率比电脑大多了。
icyalala
20 天前
SpaceX 的猎鹰 9 火箭,内置了 3 个 x86 处理器来作为辐射容错( radiation fault )
错误由软件层面解决,一台出错了也没问题,自动重启就行
这是 SpaceX 官方工程师的说法
besto
20 天前
多个方面:
1. 所谓 0 1 是数字电路,简化后的结果,底层还是要有波动的,比如电源 5V ,并不是 0V 才是 0 ,5V 才是 1 ,这中间就有了很大容错空间,如果你做 FPGA 就能接触到 setup hold removal 时序,如果不满足,就可能出错,而这个时序和频率有关系,这也就是为啥超频可能跑飞的原因,因为确实很多地方算错了;
2. 有各种容错算法,比如上面提到 ECC / CRC 校验等,当然这里大多数是对内存或是传输过程中错误;
3.也就是 15L 说的,这里有个专业名词叫 lockstep ,简单点就是 2CPU 一起算,结果一样才能出来,不行重算,有安全要求的芯片中很常见,比如 720AE 的,就是锁步 CPU ,甚至还有类似的 GPU (我知道的,IMG 公司的 BXS 这种);


最后一条:
算错是非常常见的事情,芯片出来有良品率一说,也就是出场芯片有很多都是坏的,它就会算错,这时候有 ATE 验证,甚至还有 SLT 验证,就是要工厂通过特定 0/1 特征流输入给芯片,看芯片能否返回正确值,这也就是 12L 说的验证;

@icyalala
@mobpsycho100
julyclyde
20 天前
其实保证不了
“想当年”Pentium 刚出的时候就有浮点运算错误的 bug

更不要说浮点数本身就不准
xz410236056
20 天前
校验和冗余
paopjian
20 天前
CPU 没法保证计算结果正确, 只能多重验证+算法验证+人工发现
duanxianze
20 天前
其实关键的问题就是出错的概率没你想的那么高,可以说非常非常低,比如说一个发光二极管,通电它就一定亮,断电它就一定灭,现实世界还是很稳定的,芯片的物理和化学物质也都非常稳定,就像沙子放一万年还是砂子一样,所以只要设计不出错,再加一定的冗余措施,出错的概率极低

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1107532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX