我是否需要规划现代CPU中可能存在的错误计算,例如,添加两个整数1
和1
会导致3
一次?
上面的例子中提到的算术错误是否是造成大多数“heisenbugs”背后原因的现实可能性?
答案 0 :(得分:1)
CPU功能大小已经变得足够小,数据中的错误可能会发生,但它们(更多)更可能发生在存储在内存中的数据上,而不是发生实际的错误计算。
在一些富含辐射的环境中(例如,在卫星上),(例如)多个CPU对结果进行“投票”,或者在存在分歧的情况下重复计算是相当普遍的。除此之外,关于它可能合理的唯一时间是可能影响人类生活的事情。
虽然可能,但是有一个Heisenbug真的是一个像单位沮丧的结果,它是极不可能的,至少是IMO。我已经看到了很多错误,其中一些很难追查 - 但是当它们出现时,代码中确实存在错误。
答案 1 :(得分:0)
你永远不应该看到整数数学的错误。即使使用浮点运算,它也是非常罕见的,除非有人使用更旧的处理器,或者你尝试使用无理数字,令人难以置信的精度,并且你没有使用专门的数学库。
您是否正在做一些看似整数错误的事情?如果你是的话,我会感兴趣的。
答案 2 :(得分:0)
我是否需要计划现代CPU中可能的错误计算
是。你还需要计划自发形成的黑洞,它们可以突然吸收所有附近的物质,包括你。
ALU中是否会出现此类错误?
好。如果只有工程师使用纠错码,则赔率非常非常小。必然会发生的是,错误位的组合看起来有效,必须在电路中自发产生。赔率不是零,但它们很小。
现在有没有针对此的内置保护措施?
如果没有完全忘记错误纠正码。请记住,“平等就是农民”。
http://en.wikipedia.org/wiki/Error_detection_and_correction
http://en.wikipedia.org/wiki/Dynamic_random_access_memory#Errors_and_error_correction
http://en.wikipedia.org/wiki/SECDED#Hamming_codes_with_additional_parity_.28SECDED.29
是否存在像上面提到的算术错误
的现实可能性
是。如果你将“现实”定义为非零,但实际上非常小。
最近的测试给出了各种各样的错误 超过7个数量级的费率 差异,范围从10 ^ -10到10 ^ -17 错误/位·h,
大致有一点误差, 每小时,每千兆字节的内存 一个误差,每个世纪,每个 千兆字节的记忆。