DocWindows
Vice Admiral
- Registriert
- Mai 2013
- Beiträge
- 6.812
Ned Flanders schrieb:Im AMD Architecture Programmer's Manual steht dann auch noch:
If the returned value is invalid, software must execute the instruction again. Software should implement a retry limit to ensure forward progress of code.
Und es ist ja nicht so, dass keine Alternative bestünde:
AMD: AMD RNG Library
OpenCL: clRNG
Wenn du alles lesen würdest, hättest du erkannt dass die Definition ob ein Zufallswert gültig oder ungültig ist, das CF Register bestimmt, also die CPU. Und dieses Register wird falsch gesetzt.
Hardware modifies the CF flag to indicate whether the value returned in the destination register is valid. If CF = 1, the value is valid. If CF = 0, the value is invalid. Software must test the state of the CF flag prior to using the value returned in the destination register to determine if the value is valid. If the returned value is invalid, software must execute the instruction again. Software should implement a retry limit to ensure forward progress of code.
Die CPU entscheidet ob der Zufallswert gültig ist oder nicht. Nicht die Software die die Funktion nutzt.
Und wenn immer "Kann ich nicht" zurückgegeben wird, solltest du ein rety limit beachten um einen Lock zu vermeiden. AMD gibt aber immer "Kann ich" zurück.
Zu AMDs RNG library:
The AMD Secure Random Number Generator (RNG) is a library that provides APIs to access the cryptographically secure random numbers generated by AMD’s hardware-based random number generator implementation. These are high quality robust random numbers designed to be suitable for cryptographic applications. The library makes use of RDRAND and RDSEED x86 instructions exposed by the AMD hardware
Tolle Alternative.
Gast0ne schrieb:Stimmt schon. Der Bug im Zufallsgenerator ist IMHO aber eigentlich nicht sooo tragisch, denn er besteht wohl "nur" darin, dass die CPU als Wert -1 zurückliefert und diesen Wert dennoch als gültig deklariert (also das Fehlerbit nicht setzt).
Aber spitzfindigerweise ist auch unendlich Mal -1 letztlich eine Zufallsfolge. Programme, die "echten" Zufall brauchen, dürfen sich nicht nur auf eine Quelle verlassen. Vermutlich landet hier irgendwas in einer Endlosschleife, weil es bei einem als ungültig interpretierten Wert (-1) sofort einen neuen Versuch startet (und wieder -1 zurückbekommt).
Auch für dich: Die CPU meldet jedes Mal dass der Zufallswert gültig ist. Über Gültigkeit entscheidet die CPU, nicht das Programm. Und Programme die echten Zufall brauchen, dürfen sich sehr wohl auf diese Funktion in der CPU verlassen, denn AMD sichert die Zufälligkeit explizit zu.
The AMD Secure Random Number Generator (RNG) is a library that provides APIs to access the cryptographically secure random numbers generated by AMD’s hardware-based random number generator implementation. These are high quality robust random numbers designed to be suitable for cryptographic applications.
Zuletzt bearbeitet: