Wie kann ich eine einzelne Variable von einer CUDA-Kernel-Funktion zurückgeben?
Lesezeit: 2 Minuten
Pouya BCD
Ich habe eine CUDA-Suchfunktion, die eine einzelne Variable berechnet. Wie kann ich es zurückgeben.
__global__
void G_SearchByNameID(node* Node, long nodeCount, long start,char* dest, long answer){
answer = 2;
}
cudaMemcpy(h_answer, d_answer, sizeof(long), cudaMemcpyDeviceToHost);
cudaFree(d_answer);
Für beide Zeilen erhalte ich diesen Fehler: Fehler: Argument vom Typ „long“ ist nicht kompatibel mit Parameter vom Typ „const void *“
Ich habe verwendet __device__ Variablen für diesen Zweck, so dass Sie sich nicht darum kümmern müssen cudaMalloc und cudaFree und Sie müssen keinen Zeiger als Kernel-Argument übergeben, was Ihnen ein Register in Ihrem Kernel zum Booten erspart.
@Erogol Sowohl der Kernel als auch der Hostcode kennen den Typ aus der __device__ Erklärung
– welche
8. März 2013 um 23:48 Uhr
Aus irgendeinem Grund funktioniert dies bei mir (Toolkit 6.5) nur, wenn ich ersetze "d_answer" mit d_answer, dh die Anführungszeichen entfernen. Abgesehen davon funktioniert das gut.
– icurays1
26. Mai 2015 um 7:41 Uhr
Der Wert kommt bei mir immer als Null zurück.
– orodbhen
5. September 2016 um 11:06 Uhr
Kann A __device__ Variable Thread-lokal sein? Solche globalen Variablen funktionieren nicht für Multithread-Anwendungen.
– Serge Rogatch
10. September 2016 um 19:15 Uhr
Dieser Ansatz ist nicht “reentrant” in dem Sinne, dass Starts desselben Kernels aus mehreren Streams nicht unterstützt werden.
– einpoklum
31. Mai 2019 um 22:19 Uhr
Um ein einzelnes Ergebnis zu erhalten, müssen Sie es Memcpy machen, dh:
Ich denke, der Fehler kommt, weil Sie einen langen Wert anstelle eines Zeigers auf einen langen Wert übergeben.
Du nicht haben zu memcpy() – Es gibt andere Optionen, wie z. B. die Antwort von @wich . -1, es sei denn, Sie argumentieren, dass Kopieren die beste / einzig realistische Option ist.
– einpoklum
31. Mai 2019 um 22:19 Uhr
Beachten Sie, dass die andere Option tut mach ein memcpy (Es ist im Namen cudaMemcpyFromSymbol). Diese Antwort verwendet die dynamische Zuordnung, die für Multithread-Anwendungen vorzuziehen ist, gegenüber der anderen, die eine globale Variable verwendet.
– rgov
29. Februar 2020 um 2:49 Uhr
14334400cookie-checkWie kann ich eine einzelne Variable von einer CUDA-Kernel-Funktion zurückgeben?yes