Ein Elektrotechniker warnte mich kürzlich vor der Verwendung von GPUs für wissenschaftliche Berechnungen (z. B. wo Genauigkeit wirklich wichtig ist) auf der Grundlage, dass es keine Hardware-Sicherheitsmaßnahmen wie in einer CPU gibt. Ist das wahr, und wenn ja, wie häufig/wesentlich ist das Problem bei typischer Hardware?Genauigkeit der GPU für wissenschaftliche Berechnungen
Antwort
Tatsächlich passen moderne GPUs hervorragend für das wissenschaftliche Rechnen, und viele HPC-Anwendungen werden zumindest teilweise für GPUs portiert, um Leistung und Energieeffizienz zu gewährleisten. Im Gegensatz zu älteren GPUs bieten die modernen (z. B. NVIDIAs Fermi- oder Kepler-Architekturen) vollständig standardisierte IEEE-754-Formate für einfache und doppelte Genauigkeit, so dass Sie diese genauso verwenden können wie auf einer modernen CPU .
Ich habe ein paar (ältere) Papiere dazu gefunden, aber es scheint, dass das Problem in Karten mit Rechenfähigkeiten> = 2.0 behoben wurde.
Aktuelle GPUs unterstützt nicht mit doppelter Genauigkeit Berechnung und ihre einfachgenaue Unterstützung beschönigt wichtige Aspekte des IEEE-754 Floating-Point-Standard [1], wie als korrekt gerundet Ergebnisse und ordnungsgemäße Schließung des Zahlensystems. ... Unsere Ergebnisse zeigen, dass es schwerwiegende Fehler mit den Ergebnissen der GPUs in bestimmten Rand Fällen gibt, zusätzlich zu der falschen Behandlung von denormalized Zahlen.
Karl E. Hilles und Anselmo Lastra, "GPU Gleitkommatypen Paranoia." In Proc. GP2, August 2004.
Guillaume Da Graca und David Defour, "Implementierung von float-Float-Betreiber auf Grafiken Hardware." In Proc. 7. Konferenz Reelle Zahlen und Computern, Juli 2006.
mit doppelter Genauigkeit (CUDA Rechenkapazität 1.3 und höher) [14] abweichen von dem IEEE 754-Standard: Rund-um-zu -nearest-even ist der einzige unterstützte Rundungsmodus für Reziprokwert, Division und Quadratwurzel. In einfache Genauigkeit, Denormals und Signalisierungs-NaNs werden nicht unterstützt; werden nur zwei IEEE-Rundungsmodi unterstützt (chop und run-to-nearest even), und diese werden pro Anweisung anstelle von in einem Steuerwort angegeben; und die Präzision der Teilung/Quadratwurzel ist etwas niedriger als einfache Genauigkeit.
Eigentlich meisten wissenschaftliche Berechnung der Regel nicht erforderlich, dass genau zu sein, weil Messfehler und so weitgehend die Fehler durch die Gleitkomma-Rundungs (außer vielleicht in degenerierten Fällen wie Summieren eine Reihe von Schwimmern eingeführt überwältigt in Reihenfolge vs in umgekehrter Reihenfolge, aber Sie werden diese Art von Problemen auch in der CPU bekommen und nichts wird Sie auch warnen, da es genauso funktioniert wie).Im wissenschaftlichen Rechnen reicht es im Allgemeinen aus, das Ergebnis innerhalb einer bestimmten Fehlermarge zu zeigen und zu zeigen, dass die Marge keine praktischen Probleme verursacht.
Gleitkommazahlen sind so konstruiert, dass sie schnell sind, nicht unbedingt genau in Ziffern, sogar in einer CPU, deshalb wird uns beigebracht, Fließkommazahlen immer mit einem Epsilon zu vergleichen.
OTOH, Berechnungen, die tatsächlich genaue Rundungsregeln für die letzten Ziffern benötigen, wie Buchhaltungs- oder Zahlentheorien, sollten die Verwendung von Festkommaarithmetik (z. B. Dezimalmodul) in Betracht ziehen, mit der Sie genau die Rundungsregeln angeben können.
NVIDIA ein Whitepaper veröffentlicht, die die Details der Arbeit mit Floating-Point im Allgemeinen und auf GPUs umfasst insbesondere:
http://developer.download.nvidia.com/assets/cuda/files/NVIDIA-CUDA-Floating-Point.pdf
- 1. Qt vs Visual Studio für wissenschaftliche Berechnungen
- 2. Wird C wirklich für viele wissenschaftliche Berechnungen verwendet?
- 3. Format BigDecimal ohne wissenschaftliche Notation mit voller Genauigkeit
- 4. Erhöhung der Genauigkeit der Gleitkommazahlen
- 5. Eigenschaften von 80-Bit-Berechnungen mit erweiterter Genauigkeit beginnend mit Argumenten mit doppelter Genauigkeit
- 6. Verwenden von Shader für Berechnungen
- 7. Shader auf der GPU ausführen
- 8. Matlab: Wie kann man die Genauigkeit der Berechnungen in Matlab auf 4 Ziffern reduzieren?
- 9. Beispielprobleme für gleichzeitige Berechnungen
- 10. Konservierende Einheiten für Berechnungen in der Programmierung
- 11. Wissenschaftliche Programmierung Stack für Clojure
- 12. IronPython-Bibliotheken für wissenschaftliche Plots
- 13. Wissenschaftliche Notation für ipywidgets slider
- 14. Ubuntu tötet meine Berechnungen
- 15. Messung der VAR-Genauigkeit mit Genauigkeit() von der Prognose
- 16. Heat Bar für Genauigkeit
- 17. Verrechnung auf die GPU
- 18. Wie wird die Speicherbegrenzung der GPU für die hochauflösende Bildverarbeitung auf der GPU gehandhabt?
- 19. GPU vs CPU? Anzahl der Kerne/Threads in einer GPU zur Beschleunigung der Programmberechnung?
- 20. Messzeit auf der GPU
- 21. Welche IDE für das wissenschaftliche Rechnen und Plotten in Python?
- 22. Andere Beispiele für magische Berechnungen
- 23. AutoMapper MapFrom funktioniert für Berechnungen?
- 24. Genauigkeit der Nachkommastellen
- 25. Reflektierende Sprache für symbolische Berechnungen
- 26. GPU für CFE/CE/QCC
- 27. Verbesserung der Genauigkeit OpenCV HOG Menschen Detektor
- 28. Externe GPU für maschinelles Lernen
- 29. atomicAdd() für doppelt auf GPU
- 30. Wie Matlab-Code für gpu
ja ... das ist richtig ... all diese massiven Rechencluster gebaut mit GPUs sind völlig nutzlos und im Wesentlichen nur Zufallszahlengeneratoren. Die gesamte Hardware unterliegt zufälligen Fehlern - ein einzelnes hochenergetisches Photon, das durch ein radioaktives Zerfallsereignis in einem Keramikgehäuse emittiert wird, kann Bits irgendwo in der CPU umdrehen und das System vollständig zerstören ... oder auch nicht. –
@MarcB Ich bin kein Verschwörungstheoretiker! Siehe die Links in meiner Antwort unten für eine Illustration der vergangenen Probleme. Ich möchte im Grunde wissen, ob diese in neueren Hardware angemessen behoben wurden. –