Jak często procesory popełniają błędy obliczeniowe?


22

W notatkach Dijkstry na temat programowania strukturalnego dużo mówi o sprawdzalności programów komputerowych jako bytów abstrakcyjnych. W związku z tym zauważa, że ​​testowanie nie wystarczy. Na przykład zwraca uwagę na fakt, że niemożliwe byłoby przetestowanie funkcji mnożenia f (x, y) = x * y dla dowolnych dużych wartości xiy we wszystkich zakresach xiy. Moje pytanie dotyczy jego misc. uwagi na temat „kiepskiego sprzętu”. Wiem, że esej został napisany w latach 70., kiedy sprzęt komputerowy był mniej niezawodny, ale komputery wciąż nie są idealne, więc czasami muszą popełniać błędy obliczeniowe . Czy ktoś wie, jak często to się zdarza lub czy są na to statystyki?



Oto strona wikipedia dotycząca błędu Pentium FDIV , wspomniana przez dwie obecnie istniejące odpowiedzi.
Cascabel

Poradzimy sobie bez żadnego rodzaju tworzenia kopii zapasowych lub sprawdzania błędów podstawowych operacji procesora, dzięki czemu możemy łatwo oszacować górną granicę częstotliwości przypadkowych przejściowych błędów obliczeniowych. Większość instrukcji procesora obejmuje matematykę (w obliczaniu adresów operacji pamięci, a także obliczeń), a współczesne procesory wykonują miliardy operacji na sekundę, nazwij to> 1e14 operacji dziennie. Jeśli 1 na 10 błędów matematycznych miałby oczywisty wpływ na program (prawdopodobnie niski szacunek) i nie widzimy takich błędów na co dzień, podstawowy poziom błędu dla ALU musi wynosić <1e-13, a ja zgadłby <1e-15.
Russell Borogove,

@NickC: czy sugerujesz, że nie ma nic praktycznego w tym pytaniu? Więc uważasz, że pytanie, czy sprzęt działa, czy nie, nie ma znaczenia? A jeśli naprawdę ma znaczenie, czy program działa poprawnie (czy ciężkie programowanie w czasie rzeczywistym jest tylko teoretyczne, czy zbyt zaawansowane dla osób na tej stronie?)? Co ze sprzętem, w którym jeden użytkownik może ukraść klucze innym użytkownikom z powodu wycieku informacji przez kanał boczny? Cholera, szkoda, że ​​nie było przycisku „downvote” na komentarze.
Longpoke

1
@Longpoke Me też.
Nicole

Odpowiedzi:


14

Pomijając rzeczywiste / rzeczywiste błędy w projekcie procesora, myślę, że szukasz tego SO Pytanie: Cosmic Rays. Jakie jest prawdopodobieństwo, że wpłyną one na program . Nie mogę uzyskać cytatów, ponieważ SO jest ponownie blokowane w pracy tutaj ( westchnienie ).

Ignorując powyższe, wydaje mi się, że pamiętam kilka błędów obliczeniowych FPU we wczesnych Pentium, więc z pewnością nie są one nieomylne.

Nie mam pod ręką żadnych twardych dowodów, ale moje przeczucie mówi mi, że powinieneś być bardziej zaniepokojony uszkodzeniem części pamięci podręcznej / pamięci RAM / dysku niż błędem obliczeń.


40
SO jest zablokowane w pracy? Czy ktoś w Twojej firmie próbuje sabotować rozwój oprogramowania?
Nicole,

3
Mówisz tak, jakby to była tylko jedna osoba, która jeszcze nie odniosła sukcesu ...;)
Dan McGrath

9
Nigdy nie mogłem zrozumieć uzasadnienia blokowania stron SFW na poziomie korporacyjnym. Ponieważ wyszukiwarki są niezwykle cennym narzędziem, powinieneś być w stanie wyświetlić informacje, które one dają.
Tim Post

@ Dan, odblokuj to. Powinieneś być w stanie wykonać tunelowanie https do domu.

4
Przyłapanie na omijaniu systemu było tylko przyczyną zakończenia. Przeprowadziłem się do USA i dostałem nową pracę.
Dan McGrath,

6

Dużym problemem w odpowiedzi na to pytanie jest obecnie to, że producenci procesorów pakują erratę dla układu w umowę NDA (NonDisclosure Agreement). Intel to robi, IIRC.

Wielu mniej tajnych producentów wprowadza poprawki do arkusza danych, ale nie mówi ci, co się zmieniło, więc jeśli nie masz ochoty porównać wszystkich 300 stron, trudno ci będzie powiedzieć.

W procesorach pojawiło się wiele złych instrukcji. Oglądanie raportu jądra Linuxa, który znajduje przy starcie, jest średnio interesujące.

Bardzo pokrewny jest papierowy błąd Google dotyczący błędów pamięci, są one częstsze niż myślisz. „Błędy pamięci DRAM w środowisku naturalnym: badanie terenowe na dużą skalę” Schoeder, Pinheiro i Weber Pierwotnie opublikowane w ACM SIGMETRICS w 2009 r. Opublikowane ponownie w komunikacie ACM, luty 2011 r.

Wszystkie te błędy pamięci oznaczają dla ciebie pytanie, że bez pamięci ECC i tak otrzymasz błędne obliczenia.


5

Kiedy pracowałem dla dostawcy sprzętu, twierdzono, że żaden wbudowany procesor nie był wolny od błędów. I to tylko błędy logiczne. Zazwyczaj producent znajduje większość z nich i albo odpowiada procesorowi, albo odnajduje ustawienia BIOS, które go otaczają. Ale oprócz tego, że takie rzeczy, jak promienie kosmiczne, czasami odwracają nieco pamięć (a pamięć zwykle ma bity parzystości lub obwody SECDED, aby ocalić bekon), zawsze istnieje skończona szansa, że ​​fragment zostanie odczytany nieprawidłowo. Zauważ, że bity nie są prawdziwymi zerami i jedynymi logicznymi, ale hałaśliwymi rzeczami, takimi jak napięcia i prądy, a biorąc pod uwagę skończony hałas w systemie, zawsze istnieje szansa, że ​​odczytany zostanie niewłaściwy bit. W dawnych czasach (jako programista aplikacji) znalazłem kilka błędów sprzętowych - zarówno złej logiki, jak i jednostki X w CPU Y czasami daje mi zły typ wyniku, czas, aby chłopaki z HW zastąpili odmianę żetonów. Rzeczywiste obwody dryfują z czasem i użytkowaniem, a jeśli twój szykuje się do awarii, możesz zacząć wykrywać błędy bitów, szczególnie jeśli podkręcasz lub w inny sposób przekraczasz zalecany zakres działania.

Jest to prawdziwy problem w przypadku superkomputerów, w których rozważane są obliczenia obejmujące 1e18 lub więcej operacji zmiennoprzecinkowych.


3

Poniższa treść może dotyczyć błędów obliczeniowych w procesorach graficznych.

Biorąc pod uwagę wystarczająco dużo czasu, Intel i7-3610QM i Nvidia GeForce GTX 660 nie będą się ze sobą zgadzać, biorąc pod uwagę te same instrukcje. (cuda 5.5, compute_20, sm_20)

Pozostaje zatem stwierdzić, że jeden z nich popełnia błąd.

Podczas testu porównawczego studium wykonalności symulacji cząstek zauważyłem, że po tysiącu transformacji o podwójnej precyzji (transformacje, w tym sin, cos, mnożenie, dzielenie, dodawanie i odejmowanie) zaczęły pojawiać się błędy.

Dam ci mały fragment liczb do porównania (pierwszy numer to zawsze procesor, drugi procesor graficzny)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(zauważ, że nie każda sekwencja transformacji powoduje błąd)

Chociaż maksymalny błąd jest prawie nieistotny (0.0000000000000401%), nadal istnieje i przyczynia się do błędu skumulowanego.

Teraz ten błąd może wynikać z różnicy w implementacji jednej z wewnętrznych bibliotek. Rzeczywiście wygląda na to, że GPU woli zaokrąglać w dół lub obcinać tam, gdzie procesor zaokrągla w górę. Co ciekawe, wydaje się, że dzieje się tak tylko w przypadku liczb ujemnych.

Chodzi o to, że identyczne instrukcje niekoniecznie gwarantują identyczne wyniki, nawet na urządzeniach cyfrowych.

Mam nadzieję, że to się przyczyniło.

EDYCJA jako sidenote: W przypadku błędów arytmetycznych GPU, to (ctrl + f „Pierwszy GPU z obsługą pamięci ECC”) może również być interesujące, choć niekoniecznie związane z powyższymi błędami.


Obliczenia zmiennoprzecinkowe mogą się różnić w zależności od miejsca ich przechowywania. Wewnętrzne rejestry FPU niektórych procesorów mają inną długość niż RAM, więc w zależności od tego, skąd ładuje operantów, może dojść do różnych rezultatów. Aby uzyskać więcej informacji, polecam floating-point-gui.de . Nie jest to jednak błąd obliczeniowy - wynika on z działania arytmetyki zmiennoprzecinkowej.
Philipp

2
Dla tych, którzy nie wiedzą, jak działa matematyka FP, tylko dla wyjaśnienia uwagi Filipa, różnice te mogą być bardzo poprawne (ponieważ w ich różnicach nie wynikają z błędów oprogramowania lub błędów sprzętowych). Różnice prawdopodobnie wynikają z implementacji oprogramowania lub sprzętu. Aby ustalić, czy są one
wadliwe,

1

Pod względem tego, co uważasz za rzeczywisty „procesor” (jednostki wykonawcze, potok .. itd.), Prawie nigdy się to nie dzieje. Znany był problem z jednym ze smaków Pentium jakiś czas temu, ale to jedyny, o jakim kiedykolwiek słyszałem. Teraz, jeśli weźmie się pod uwagę układy scalone wbudowane w procesory lub przynajmniej takie samo opakowanie, takie jak kontrolery USB, TSEC, kontroler DMA lub kontroler pamięci, istnieje wiele błędów. Wątpię jednak, aby istniały jakiekolwiek dane statystyczne na ten temat.


0

Kolejny „kiepskie hardware” kwestią do rozważenia w tym kontekście jest fakt, że zmiennoprzecinkowych sprzęt jest z natury „stratny”: ma ograniczoną dokładność iz dostatecznie dużych ilościach (patrz powrotem do pierwotnego Dijkstra cudzysłów) nie będzie w stanie odróżnić xi x + 1, a nawet x + 1000000. Można uzyskać „nieskończone” precyzyjne biblioteki zmiennoprzecinkowe, ale są one powolne i ostatecznie wciąż ograniczone dostępną pamięcią.

Krótko mówiąc, Dijkstra działał w dziedzinie teorii, a prawdziwy sprzęt / oprogramowanie nie pasuje zbyt dobrze do ideałów teoretycznych. (Pamiętaj, że oryginalna „maszyna Turinga” określała nieskończoną taśmę papierową.)


2
Nie musi to jednak mieć wpływu na wiarygodność, która była kontekstem pytania. Górne granice tego rodzaju strat można i często precyzyjnie rozlicza się teoretycznie. Innymi słowy, programy nadal mogą być w sposób możliwy do udowodnienia w ramach określonego z góry marginesu błędu. W niektórych dziedzinach uważam każdego, kto nie wziąłby pod uwagę tych problemów, za niewłaściwe wykonywanie swojej pracy!
Elias Vasylenko

(1 - .7) * 100 powinna wynosić 30, choć JavaScript zwróci błąd, 30.000000000000004co jest błędem. Czy jest to sprzęt czy oprogramowanie, nie jestem osobiście pewien.
John
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.