Was ist die Rolle der cudaDeviceReset() in Cuda
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void funct(void){
printf("Hello from GPU!\n");
}
int main(void){
funct << < 2, 4 >> >();
for (int i = 0; i < 10; i++){
cudaDeviceReset();
//cudaDeviceSynchronize();
printf("Hello, World from CPU!\n");
}
return 0;
}
Dachte ich, die Rolle der cudaDeviceReset ist cudamemcpy. in diesem Fall hatten wir nicht das Ergebnis von Zahl. So waren wir nicht in der Lage zu verwenden cudamemcpy. Aber Wir verwendet, cudaDeviceReset für die Rückgabe der vier "Hallo von der GPU!" ergeben sich aus kernel.
Ist das richtig?
und ich ersetzt cudaDeviceRest() mit cudaDeviceSynchronize(). Ich sah das gleiche Ergebnis. aber ich konnte doch nicht wissen, den Unterschied zwischen Ihnen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Rolle der
cudaDeviceReset()
dokumentiert ist hierEs wird verwendet, um zu zerstören eine CUDA Kontext, was bedeutet, dass alle Geräte-Zuweisungen entfernt werden.
Ich bin damit einverstanden, dass es scheint eine Synchronisierung Effekt. Da jedoch die Dokumentation besagt:
Ich glaube, es ist unsicher, um sich auf dieses Verhalten verlassen. Darüber hinaus ist die Dokumentation nennt die Gefahr der Verwendung dieser Funktion in einer multi-threaded-app. Daher sichere Codierung diktieren würde:
Verwenden der Gerät-Synchronisation (z.B.
cudaDeviceSynchronize()
odercudaMemcpy()
usw.)Abrufen alle Daten, die Ihre Anwendung erhalten wollen, das kann in ein Gerät Zuordnung, oder, dass eine gerade Laufenden Kernels kann aktualisiert haben (im Gerätespeicher).
Stellen Sie sicher, dass jedem host-threads, die möglicherweise auch über die Geräte-Aktivitäten im Zusammenhang mit Ihnen, sind auch beendet
Stellen Sie sicher, dass alle C++ - Objekte, die möglicherweise Gerät Aktivität in Ihren Destruktoren sind richtig zerstört oder out-of-scope
call
cudaDeviceReset()
als Teil der Anwendung shut-down.Beachten Sie, dass der Aufruf
cudaDeviceReset()
als Teil der Anwendung shut-down sollte nicht obligatorisch sein. Viele Anwendungen funktionieren ohne solch eine Redewendung.Diese Antwort ebenfalls von Interesse sein könnten.