Äquivalent von usleep () im CUDA-Kernel?

8

Ich möchte etwas wie usleep() in einem CUDA-Kernel nennen. Das grundlegende Ziel ist es, alle GPU-Kerne für einige Millisekunden schlafen zu lassen oder beschäftigt zu sein - das ist Teil einiger Plausibilitätsprüfungen, die ich für eine CUDA-Anwendung durchführen möchte. Mein Versuch, dies zu tun, ist unten:

%Vor%

Ich erhalte den folgenden Fehler, wenn ich versuche, dies mit NVCC zu kompilieren:

%Vor%

Natürlich darf ich keine Host-Funktion wie usleep() in einem Kernel verwenden. Was wäre eine gute Alternative dazu?

    
solvingPuzzles 26.06.2012, 22:59
quelle

2 Antworten

9

Sie können mit einer Schleife warten, die clock() anzeigt.

Warten auf mindestens 10.000 Taktzyklen:

%Vor%

Hinweis: Dies ist nicht getestet. Der Code, der Überläufe behandelt, wurde von dieser Antwort von @ ausgeliehen. Pedro. Lesen Sie seine Antwort und Abschnitt B.10 im CUDA C Programmierhandbuch 4.2, um zu erfahren, wie clock() funktioniert. Es gibt auch einen clock64() -Befehl.

    
Roger Dahl 27.06.2012, 00:53
quelle
17

Sie können mit clock () oder clock64 () drehen. Das CUDA SDK ConcurrentKernels-Beispiel führt dies folgendermaßen aus:

%Vor%

Ich empfehle die Verwendung von clock64 (). clock () und clock64 () sind in Zyklen, so dass Sie die Häufigkeit mit cudaDeviceProperties () abfragen müssen. Die Frequenz kann dynamisch sein, so dass es schwierig ist, eine genaue Spin-Schleife zu garantieren.

    
Greg Smith 27.06.2012 00:56
quelle

Tags und Links