现代CPU中的整数算术错误

时间:2011-01-28 00:04:25

标签: cpu heisenbug alu

我是否需要规划现代CPU中可能存在的错误计算,例如,添加两个整数11会导致3一次?

  • (多久一次)ALU中出现此类错误?
  • 现在有没有针对此的内置保护措施?

上面的例子中提到的算术错误是否是造成大多数“heisenbugs”背后原因的现实可能性?

3 个答案:

答案 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,

     

大致有一点误差,   每小时,每千兆字节的内存   一个误差,每个世纪,每个   千兆字节的记忆。