Con quale frequenza le CPU commettono errori di calcolo?


22

Nelle Note sulla programmazione strutturata di Dijkstra parla molto della dimostrabilità dei programmi per computer come entità astratte. Come corollario, osserva come i test non siano sufficienti. Ad esempio, sottolinea il fatto che sarebbe impossibile testare una funzione di moltiplicazione f (x, y) = x * y per qualsiasi grande valore di xey nell'intero intervallo di xey. La mia domanda riguarda il suo miscuglio. commenti su "hardware scadente". So che il saggio è stato scritto nel 1970 quando l'hardware del computer era meno affidabile, ma i computer ancora non sono perfetti, quindi devono fare errori di calcolo volte . Qualcuno sa quanto spesso accade o se ci sono statistiche su questo?



Ecco la pagina di Wikipedia sul bug Pentium FDIV , menzionata dalle due risposte attualmente esistenti.
Cascabel,

Ci riusciamo senza alcun tipo di backup o controllo degli errori sulle operazioni di base della CPU, quindi possiamo facilmente stimare un limite superiore per la frequenza di errori di calcolo transitori casuali. La maggior parte delle istruzioni della CPU riguardano la matematica (nel calcolo degli indirizzi per le operazioni di memoria e nel calcolo) e le moderne CPU eseguono miliardi di operazioni al secondo, chiamandole> 1e14 operazioni al giorno. Se 1 su 10 errori matematici avrebbe un effetto evidente sul programma (probabilmente una stima bassa) e non vediamo tali errori su base giornaliera, il tasso di errore di base per ALU deve essere <1e-13, e I indovinerei <1e-15.
Russell Borogove,

@NickC: stai insinuando che non c'è nulla di pratico in questa domanda? Quindi pensi che la questione se l'hardware funzioni o no non ha importanza? Che dire quando importa davvero se il programma funziona correttamente (la programmazione in tempo reale è solo teorica o troppo avanzata per le persone su questo sito?)? Che dire dell'hardware in cui un utente può rubare le chiavi dagli altri utenti a causa della perdita di informazioni attraverso il canale laterale? Accidenti vorrei che ci fosse un pulsante di voto negativo per i commenti.
Longpoke,

1
@Longpoke Anche a me.
Nicole,

Risposte:


14

A parte gli errori reali / reali nella progettazione di una CPU, penso che tu stia cercando questa domanda SO: Raggi cosmici. Qual è la probabilità che influenzeranno un programma . Non riesco a ottenere citazioni perché SO è di nuovo bloccato al lavoro qui ( sospiro ).

Ignorando quanto sopra, mi sembra di ricordare che c'erano alcuni bug di calcolo FPU nei primi Pentium, quindi certamente non sono infallibili.

Non ho prove concrete a portata di mano, ma il mio istinto mi dice che probabilmente dovresti essere più preoccupato per i bit di cache / RAM / disco che sono corrotti, quindi il calcolo non è corretto.


40
SO è bloccato al lavoro? Qualcuno nella tua azienda sta cercando di sabotare lo sviluppo del software?
Nicole,

3
Lo dici come se fosse solo una persona e non hanno ancora avuto successo ...;)
Dan McGrath,

9
Non sono mai riuscito a capire la logica del blocco dei siti SFW a livello aziendale. Poiché i motori di ricerca sono uno strumento estremamente prezioso, dovresti essere in grado di visualizzare le informazioni che producono.
Tim Post

@ Dan, sbloccalo. Dovresti essere in grado di fare https-tunneling a casa.

4
Essere scoperti bypassando il sistema era solo causa di interruzione. Mi sono trasferito negli Stati Uniti e ho trovato un nuovo lavoro.
Dan McGrath,

6

Un grosso problema nel rispondere a questa domanda in questi giorni è che i produttori di CPU avvolgono gli errata per il chip in un accordo di riservatezza (NDA). Intel fa questo, IIRC.

Molti produttori meno riservati pubblicano correzioni alla scheda tecnica, ma non ti dicono cosa è cambiato, quindi a meno che tu non voglia confrontare tutte e 300 le pagine, avrai difficoltà a dirlo.

Ci sono state molte cattive istruzioni nelle CPU, guardare un report del kernel Linux che trova all'avvio è moderatamente interessante.

Molto correlato è il documento Google sugli errori di memoria, sono più comuni di quanto si pensi. "Errori DRAM in natura: uno studio sul campo su larga scala" Schoeder, Pinheiro e Weber Originariamente pubblicato su ACM SIGMETRICS nel 2009. Ripubblicato in Communications of the ACM Feb 2011

Ciò che tutti questi errori di memoria significano per la tua domanda è che senza la memoria ECC, otterrai comunque calcoli sbagliati.


5

Ai tempi in cui lavoravo per un fornitore di hardware, era stato affermato che nessuna CPU mai costruita era priva di bug. E questo è solo bug logici. Di solito il produttore trova la maggior parte di essi e rispetta il chip o trova le impostazioni del BIOS che lo circondano. Ma oltre al fatto che cose come i raggi cosmici occasionalmente capovolgono un po 'nella memoria (e la memoria di solito ha bit di parità o circuiti SECDED per salvare il bacon), c'è sempre una possibilità finita che un po' venga letto in modo errato. Si noti che i bit non sono veri e propri zero logici, ma cose rumorose come tensioni e correnti e dato il rumore finito nel sistema c'è sempre la possibilità che venga letto un bit sbagliato. Ai vecchi tempi (come programmatore di app), ho trovato alcuni bug HW, entrambi di tipo logico errato, e dell'unità X nella CPU Y mi dà occasionalmente un tipo di risultato negativo, tempo di convincere i ragazzi HW a sostituire una varietà di chip. I circuiti effettivi si spostano nel tempo e nell'uso e, se il tuo si sta preparando a fallire, potresti iniziare a raccogliere errori di bit, specialmente se stai overcloccando o superando in altro modo l'intervallo operativo raccomandato.

È un vero problema per il supercalcolo, in cui sono previsti calcoli che coinvolgono 1e18 o più operazioni in virgola mobile.


3

Il seguente contenuto potrebbe riguardare errori di calcolo nelle GPU.

Dato il tempo sufficiente, Intel i7-3610QM e una Nvidia GeForce GTX 660 non saranno d'accordo tra loro dato le stesse istruzioni. (cuda 5.5, compute_20, sm_20)

Quindi, uno rimane per concludere che uno dei due commette un errore.

Durante un benchmark di studio di fattibilità sulla simulazione delle particelle, ho notato che dopo circa mille trasformazioni di precisione doppia (trasformazioni tra cui sin, cos, moltiplicazione, divisione, addizione e sottrazione) iniziarono a insinuarsi.

Ti darò un piccolo estratto di numeri da confrontare (il primo numero è sempre CPU, la seconda 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

(nota che non tutte le sequenze di trasformazione generano un errore)

Mentre l'errore massimo è quasi trascurabile (0.0000000000000401%), esiste ancora e contribuisce all'errore cumulativo.

Ora questo errore potrebbe essere dovuto a una differenza nell'implementazione di una delle librerie intrinseche. In effetti, sembra che la GPU preferisca arrotondare o troncare dove la CPU arrotonda. Curiosamente, questo sembra accadere solo su numeri negativi.

Ma il punto è che istruzioni identiche non sono necessariamente garantite per restituire risultati identici, anche su macchine digitali.

Spero che questo abbia contribuito.

EDIT come sidenote: nel caso di errori aritmetici della GPU, anche questo (ctrl + f "Prima GPU con supporto memoria ECC") potrebbe essere interessante, anche se non necessariamente rilevante per gli errori sopra.


I calcoli in virgola mobile potrebbero risultare diversi in base alla posizione in cui sono memorizzati. I registri FPU interni di alcune CPU hanno una lunghezza diversa rispetto alla RAM, quindi a seconda di dove carica gli operatori, possono arrivare a risultati diversi. Per ulteriori informazioni, raccomando floating-point-gui.de . Questo, tuttavia, non è un errore di calcolo - è in base alla progettazione di come funzionano l'aritmetica in virgola mobile.
Philipp,

2
Per coloro che non sono consapevoli di come funziona la matematica FP, solo per chiarire l'osservazione di Philipp, queste differenze potrebbero benissimo essere corrette (poiché nelle loro differenze non sono dovute a bug del software o bug dell'hardware). È probabile che le differenze siano dovute a implementazioni di software o hardware. Bisogna usare la nozione di epsilon a macchina fissa per determinare se questi sono difettosi: en.wikipedia.org/wiki/Machine_epsilon (essenzialmente questa costante descrive quanto deve essere precisa una singola operazione FP)
Thomas Eding

1

In termini di ciò che si considera l'attuale "CPU" (unità di esecuzione, pipeline ... ecc.) Praticamente non succede mai. Qualche tempo fa c'era un problema noto con uno dei sapori Pentium, ma è l'unico di cui abbia mai sentito parlare. Ora, se si considerano i set di chip integrati nei processori o almeno nella stessa confezione come controller USB, TSEC, controller DMA o controller di memoria, allora ci sono molti errori. Dubito però che ci siano dati statistici di questo tipo.


0

Un altro problema "hardware scadente" da considerare in questo contesto è che l'hardware in virgola mobile è intrinsecamente "in perdita": ha una precisione limitata e con numeri sufficientemente grandi (fare riferimento alla citazione originale Dijkstra) non sarà possibile distinguere tra xe x + 1o addirittura x + 1000000. È possibile ottenere librerie a virgola mobile di precisione "infinita", ma sono lente e alla fine ancora limitate dalla memoria disponibile.

In breve, Dijkstra stava lavorando nel regno della teoria e il vero hardware / software non corrisponde molto bene agli ideali teorici. (Ricorda, la "macchina di Turing" originale ha specificato un nastro di carta infinito.)


2
Ciò non influisce necessariamente sulla provabilità, tuttavia, che era il contesto della domanda. I limiti superiori di questo tipo di perdite possono essere, e spesso sono, spiegati con precisione in teoria. In altre parole, i programmi possono ancora essere dimostrati correttamente entro un certo margine di errore prestabilito. In alcuni campi considererei chiunque non abbia preso in considerazione questi problemi di non svolgere correttamente il proprio lavoro!
Elias Vasylenko,

(1 - .7) * 100 dovrebbe essere 30 anche se JavaScript restituirà il 30.000000000000004che è un errore. Che sia hardware o software non sono personalmente sicuro.
Giovanni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.