CPU는 얼마나 자주 계산 오류를합니까?


22

Dijkstra의 구조적 프로그래밍에 대한 노트에서 그는 컴퓨터 프로그램의 추상 엔티티로서의 가능성에 대해 많이 이야기합니다. 결과적으로 그는 테스트가 충분하지 않은 방법을 말합니다. 예를 들어, 그는 x와 y의 전체 범위에서 x와 y의 큰 값에 대해 곱셈 함수 f (x, y) = x * y를 테스트하는 것이 불가능하다는 사실을 지적합니다. 내 질문은 그의 기타에 관한 것입니다. "느슨한 하드웨어"에 대한 언급. 나는 컴퓨터 하드웨어가 신뢰성이 떨어지는 때 에세이는 1970 년대에 쓰여진 알고 있지만, 그들은 계산 실수를해야하므로 컴퓨터는 아직 완벽하지 않습니다 때로는 . 이 일이 얼마나 자주 발생하는지 또는 이것에 대한 통계가 있는지 아는 사람이 있습니까?



다음은 현재 존재하는 두 개의 답변에서 언급 한 Pentium FDIV 버그 의 wikipedia 페이지입니다 .
Cascabel

기본 CPU 작업에 대한 백업이나 오류 검사가 없으므로 임의의 일시적인 계산 오류의 빈도에 대한 상한을 쉽게 추정 할 수 있습니다. 대부분의 CPU 명령어는 연산 (메모리 연산 및 주소 계산을위한 주소 계산)과 관련이 있으며 최신 CPU는 초당 수십억 건의 작업을 수행하고 있습니다. 수학 오류 10 개 중 1 개가 프로그램에 명백한 영향을 미치고 (아마도 추정치가 낮음) 매일 이러한 오류가 표시되지 않으면 ALU의 기본 오류율이 <1e-13이어야하고 I <1e-15를 추측합니다.
Russell Borogove가

@ NickC :이 질문에 실용적인 것이 없다는 것을 암시하고 있습니까? 하드웨어의 작동 여부에 대한 질문은 중요하지 않다고 생각하십니까? 프로그램이 제대로 작동하는지 실제로 중요한 시점은 어떻습니까? 사이드 채널을 통해 정보가 유출되어 한 사용자가 다른 사용자의 키를 훔칠 수있는 하드웨어는 어떻습니까? 젠장, 댓글에 대한 downvote 버튼이 있었으면 좋겠다.
Longpoke

1
@Longpoke 저도.
Nicole

답변:


14

CPU 디자인의 실제 / 실제 오류는 제쳐두고, 당신은이 SO 질문 : Cosmic Rays를 찾고 있다고 생각합니다 . 확률은 그들이이 프로그램에 영향을 미칠 것입니다 . SO가 직장에서 다시 차단되었으므로 견적을 얻을 수 없습니다 ( sigh ).

위의 내용을 무시하고, 초기 펜티엄에는 FPU 계산 버그가 있었음을 기억하는 것 같습니다.

나는 확실한 증거가 없지만 내 직감에 따르면 캐시 / RAM / 디스크의 비트 가 손상되고 계산이 잘못되었다는 것에 대해 더 걱정해야한다고 말하고 있습니다 .


40
직장에서 차단 되었습니까? 회사의 누군가가 소프트웨어 개발을 방해하려고합니까?
Nicole

3
당신은 마치 사람이고 아직 성공하지 못한 것처럼 말합니다 ...;)
Dan McGrath

9
회사 수준에서 SFW 사이트를 차단하는 이유를 이해할 수 없었습니다. 검색 엔진은 매우 유용한 도구입니다, 당신은 해야 그들이 얻을 수있는 정보를 볼 수 있습니다.
Tim Post

@Dan, 차단을 해제하십시오. 집에 https-tunnelling 할 수 있어야합니다.

4
시스템을 우회하여 잡히면 종료의 원인이됩니다. 나는 미국으로 이사해서 새로운 일자리를 얻었습니다.
Dan McGrath

6

요즘이 질문에 대답하는 데있어 큰 문제는 CPU 제조업체들이 칩의 정오표를 NDA (Non-Disclosure Agreement)로 포장한다는 것입니다. 인텔, IIRC.

덜 비밀스러운 제조업체는 데이터 시트에 대한 수정 사항을 발행하지만 변경된 내용을 알려주지 않으므로 300 페이지를 모두 비교하지 않으면 말하기가 어렵습니다.

CPU에는 많은 나쁜 지시가 있었으며 부팅시 발견되는 Linux 커널 보고서가 적당히 흥미 롭습니다.

Google의 메모리 오류와 관련이 있습니다. 생각보다 더 일반적입니다. "야생 : 대규모 현장 연구의 DRAM 오류"Schoeder, Pinheiro 및 Weber는 원래 2009 년 ACM SIGMETRICS에 게시되었습니다. 2011 년 2 월 ACM 커뮤니케이션에 재 출판

이러한 모든 메모리 오류의 의미는 ECC 메모리가 없으면 어쨌든 잘못된 계산을 얻을 수 있다는 것입니다.


5

내가 하드웨어 벤더를 위해 일했을 때, 어떤 CPU도 버그가 없다고 주장했다. 그리고 그것은 단지 논리적 인 버그입니다. 일반적으로 제조업체는 대부분을 찾아 칩을 재 스핀하거나 주변의 BIOS 설정을 찾습니다. 그러나 우주 광선과 같은 것들이 때때로 메모리에서 비트를 뒤집는다는 사실 외에도 (메모리에는 일반적으로 베이컨을 저장하기 위해 패리티 비트 또는 SECDED 회로가 있습니다) 비트가 잘못 읽힐 가능성은 항상 한정되어 있습니다. 비트는 실제 논리 0과 1이 아니지만 전압 및 전류와 같은 잡음이 많은 시스템에 유한 잡음이 주어지면 항상 잘못된 비트를 읽을 가능성이 있습니다. 예전에는 (응용 프로그램 프로그래머로서) 몇 가지 HW 버그가 발견되었습니다-나쁜 논리 종류와 CPU Y의 X 단위가 때때로 나에게 잘못된 결과 유형을 제공합니다. HW 직원들이 다양한 칩을 교체 할 시간입니다. 실제 회로는 시간과 사용에 따라 드리프트되며, 장애가 발생할 경우 특히 오버 클로킹 중이거나 권장 작동 범위를 초과하는 경우 비트 오류를 ​​포착 할 수 있습니다.

1e18 이상의 부동 소수점 연산을 계산하는 계산이 고려되는 수퍼 컴퓨팅의 실제 문제입니다.


3

다음 내용은 GPU의 계산 오류에 관한 것입니다.

충분한 시간이 주어지면 인텔 i7-3610QM과 Nvidia GeForce GTX 660은 동일한 지침에 따라 서로 동의하지 않습니다. (cuda 5.5, compute_20, sm_20)

따라서 둘 중 하나가 실수를한다는 결론을 내릴 수 있습니다.

파티클 시뮬레이션 타당성 연구 벤치 마크에서 나는 수천 정도의 배정 밀도 변환 (sin, cos, 곱셈, 나눗셈, 덧셈 및 뺄셈을 포함한 변환) 오류가 발생하기 시작했습니다.

나는 당신에게 비교할 작은 숫자의 발췌를 줄 것입니다 (첫 번째 숫자는 항상 CPU, 두 번째 GPU입니다)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(모든 변환 시퀀스가 ​​오류를 생성하는 것은 아닙니다)

최대 오류는 거의 무시할 수 (0.0000000000000401%)있지만 여전히 존재하며 누적 오류에 기여합니다.

이제이 오류는 고유 라이브러리 중 하나의 구현이 다르기 때문일 수 있습니다. 실제로 GPU가 반올림하거나 CPU가 반올림되는 부분을 자르는 것을 선호하는 것처럼 보입니다. 흥미롭게도 이것은 음수에서만 발생하는 것으로 보입니다.

그러나 요점은 동일한 명령어가 디지털 기기에서도 동일한 결과를 반환한다고 반드시 보장 할 필요는 없다는 것입니다.

이것이 도움이 되었기를 바랍니다.

(!) 참고로 편집 : GPU 연산 오류의 경우, (CTRL + F "ECC 메모리 지원하는 최초의 GPU는") 또한 관심의 위의 오류에 반드시 관련 아니지만이 될 수 있습니다.


부동 소수점 계산은 저장된 위치에 따라 다르게 나타날 수 있습니다. 일부 CPU의 내부 FPU 레지스터는 RAM과 길이가 다르므로 피연산자를로드하는 위치에 따라 다른 결과가 나올 수 있습니다. 자세한 내용은 floating-point-gui.de 권장 합니다. 그러나 이것은 계산 오류가 아니며 부동 소수점 산술이 작동하는 방식을 의도적으로 설계 한 것입니다.
Philipp

2
FP 수학의 작동 방식을 모르는 사람들은 Philipp의 말을 명확히하기 위해 이러한 차이가 매우 정확할 수 있습니다 (차이는 소프트웨어 버그 나 하드웨어 버그가 아니기 때문에). 차이점은 소프트웨어 구현 또는 하드웨어 구현 때문일 수 있습니다. 이러한 버그가 있다면 하나는 결정하기 위해 고정 된 기계 엡실론의 개념을 사용해야합니다 en.wikipedia.org/wiki/Machine_epsilon은 (기본적으로이 상수는 하나의 FP의 작동이 얼마나 정확한 설명)
토마스 대한 수정 사항

1

실제 "CPU"(실행 단위, 파이프 라인 ..ect)를 고려할 때 거의 발생하지 않습니다. 펜티엄 맛 중 하나와 관련하여 알려진 문제가 있었지만 그것은 내가 들어 본 유일한 것입니다. 이제 프로세서에 내장되어 있거나 USB 컨트롤러, TSEC, DMA 컨트롤러 또는 메모리 컨트롤러와 같은 패키징에 내장 된 칩셋을 고려하면 많은 정오표가 있습니다. 그래도 그것에 대한 통계 데이터가 있는지 의심합니다.


0

이러한 맥락에서 고려해야 할 또 다른 "형편없는 하드웨어"문제는 부동 소수점 하드웨어를하는 것은 "손실"는 본질적 때문이다 : 그것은 제한된 정밀도를 가지고 있으며, 충분히 많은 수의 (원래 익스트라 견적을 다시 참조)과는 구별 할 수 없습니다 xx + 1, 또는 x + 1000000. "무한한"정밀 부동 소수점 라이브러리를 얻을 수 있지만 사용 가능한 메모리로 인해 속도가 느리고 궁극적으로 여전히 제한됩니다.

요컨대 Dijkstra는 이론 영역에서 작업하고 있었고 실제 하드웨어 / 소프트웨어는 이론적 이상과 잘 맞지 않습니다. (원래 "Turing machine"은 무한한 종이 테이프를 지정했음을 기억하십시오.)


2
그러나 이것이 반드시 가능성에 영향을 미치는 것은 아닙니다. 이것이 질문의 맥락이었습니다. 이러한 종류의 손실에 대한 상한은 이론적으로 정확하게 설명 될 수 있으며, 종종 설명됩니다. 다시 말해서, 프로그램은 여전히 ​​소정의 미리 결정된 오차 한계 내에서 입증 될 수있다. 특정 분야에서는 이러한 문제를 고려하지 않은 사람은 업무를 제대로 수행하지 않는 것으로 간주합니다!
Elias Vasylenko

(1 - .7) * 100 해야 자바 스크립트를 반환하지만 30 수 30.000000000000004있는 것입니다 오류. 하드웨어이든 소프트웨어이든 개인적으로 확실하지 않습니다.
John
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.