0

我是否需要为现代 CPU 中可能的计算错误做准备,例如两个整数相加11导致3一次?

  • (多久一次)ALU 中是否会出现此类错误?
  • 现在有没有针对这种情况的内置保护?

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

4

3 回答 3

1

CPU 特征大小已经变得足够小,以至于数据中可能会发生这样的错误,但它们(更多)发生在存储在内存中的数据上,而不是发生实际的错误计算。

在一些辐射丰富的环境中(例如,在卫星上),拥有(例如)多个 CPU 对结果“投票”或在/如果存在分歧时重复计算是相当普遍的。除此之外,大约唯一可能合理的情况是发生在可能影响人类生活的事情上。

虽然有可能有一个 Heisenbug 真的是一个有点不安的结果,但这是极不可能的,至少 IMO 是这样。我已经看到了很多错误,其中一些很难追踪——但是当它们出现时,代码中确实存在错误。

于 2011-01-28T00:11:13.837 回答
0

你不应该看到整数数学的错误。即使使用浮点运算,它也非常罕见,除非有人使用更旧的处理器,或者您尝试使用无理数、难以置信的精度做某事,并且您没有使用专门的数学库。

你在做一些看起来整数错误的事情吗?如果你是我会很感兴趣的。

于 2011-01-28T00:08:37.767 回答
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 错误/bit·h,

大约 1 位错误,每小时,每 GB 内存到 1 位错误,每世纪,每 GB 内存。

于 2011-01-28T00:11:38.863 回答