2016-07-20 23 views
-1

Ich schreibe eine MEX-Funktion mit CUDA-Code und in der Host-Funktion muss ich alle Array A Werte auf float 0.0 setzen. Dies scheint durch die Zerstörung und neu zu erstellen, um das Array zu arbeiten:Array-Werte in einer mex cuda-Funktion auf Null setzen

mxGPUDestroyGPUArray(A); 
    A = mxGPUCreateGPUArray(1, &dims, mxSINGLE_CLASS, mxREAL, MX_GPU_INITIALIZE_VALUES); 

Gibt es eine natürliche/elegante Art und Weise das gleiche Ergebnis zu erzielen?

+2

Wenn Sie es ** in einer mex CUDA-Funktion tun wollen ** sollten Sie in der Lage sein zu verwenden [ 'cudaMemset'] (http: //docs.nvidia. com/cuda/cuda-Laufzeit-api/Gruppe__CUDART__MEMORY.html # group__CUDART__MEMORY_1gf7338650f7683c51ee26aadc6973c63a). –

+0

Ich habe vergessen zu erwähnen, dass mein Array A ein 3D-Array der Größe [K, K, K] ist. Ich habe versucht, cudaMemset (A, 0.0, (K * K * K) * sizeof (float)); aber das bringt eine Reihe von Fehlern bei der Ausführung zurück –

+0

Ich bin ziemlich überzeugt, dass 'cudaMemset' verwendet werden könnte. Eine ausführlichere Beschreibung würde wahrscheinlich benötigt, um zu erklären, warum es in Ihrem Fall nicht funktioniert. –

Antwort

0

cudaMemset erwartet einen Gerätezeiger, während mxGPUCreateGPUArray einen mxGPUobject zurückgibt. Laut der Dokumentation sollte man in der Lage sein, diesen Zeiger mit mxGPUGetData zu bekommen. Außerdem muss der value Parameter vom Typ int sein, anstelle des Floats, den Sie ihm geben. Glücklicherweise entspricht ein Fließkommawert von 0.0 einer binären Darstellung (/ Ganzzahl) von 0.

(Frage 'gewandert' von Kommentaren)