Unter http://docs.nvidia.com/cuda/cuda-c-programming-guide/#device-variable-qualifier heißt es, dass eine __device_ Qualifier-Variable die "Lebensdauer einer Anwendung" hat. Bedeutet das den Kernel? Wenn es mehrere Kernel gibt, woher weiß CUDA dann, welche Variable zu welchem Kernel gehört?Bereich von __device__ Qualifier
Wenn ich erkläre eine __device_ Variable wie so:
void someHOSTfunction() {
__device__ int var;
// Launch kernel etc...
}
Ist „var“ nach wie vor global in dem Sinne, dass es nach wie vor erreichbar von einem Kern aus einer anderen Funktion gestartet ist, auch wenn es „local“ ist auf dem Stapel von someHOSTfunction() und erhält Bereich (?), wenn einigeHOSTfunction() zurückgibt? Macht es einen Unterschied, es so zu schreiben:
__device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
Jetzt Var ist eine globale Variable. Aber das bedeutet, dass es auch von anderen Übersetzungseinheiten aus zugänglich ist. Dies wird wahrscheinlich arbeiten, um nicht zu verhindern, dass:
static __device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
Was der richtige Weg, es zu tun wäre?
Ist dies für die Funktion auf dem Gerät gilt: d. H. __ device__ void fun() {}? Afaik ist es möglich, eine __ shared__ var auf diese Weise zu deklarieren. – Bwawhwmopoloin
Wenn Funktion als '__device__' deklariert wird, ist nur ** der Gerätecode zugänglich (d. H. Aus dem Kernel oder einer anderen' __device__' Funktion). '__shared__' bezieht sich nur auf Variablen und bedeutet, dass sie im Thread Shared Memory gespeichert werden (alle Threads aus einem Block haben Zugriff auf die Variable). Siehe den Link für weitere Informationen: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions – Matso
Ich war ein bisschen unspezifisch. Ich meinte, wenn ich eine __device __ Variable in einer __device __ Funktion deklariere, wäre das in Ordnung? – Bwawhwmopoloin