Kann ich ein C ++ Objekt auf das Gerät kopieren?
sage ich habe:
%Vor%Nun, wie kopiere ich "c" in den Gerätespeicher und starte den Kernel "useClass"?
Ja, Sie können ein Objekt auf das Gerät kopieren, um es auf dem Gerät zu verwenden. Wenn das Objekt Zeiger auf dynamisch zugewiesene Bereiche enthält, erfordert der Prozess einige zusätzliche Schritte.
Siehe meine Antwort hier für eine Diskussion dessen, was involviert ist. Diese Antwort enthält auch einige Beispielcode-Antworten, die damit verknüpft sind.
Wenn Sie in Ihrer Klassendefinition bestimmte Funktionen auf dem Gerät verwenden möchten, sollten Sie diese Funktionen entsprechend dekorieren (d. h. wahrscheinlich mit __device__ __host__
);
BEARBEITEN: Als Antwort auf eine Frage (jetzt gelöscht) ist hier der einfachste Beispielcode, den ich basierend auf dem mitgelieferten Code erstellen könnte:
%Vor%Im Interesse der Kürze / Klarheit habe ich auf die übliche cuda-Fehlerprüfung verzichtet.
Wenn Sie auf die Frage antworten, können Sie den Speicher nicht direkt vom Host mithilfe des Zeigers in der gerätebasierten Klasse zuweisen. Der Grund dafür ist, dass cudaMalloc einen gewöhnlichen hostbasierten Pointer-Speicher erwartet, wie zum Beispiel:
%Vor%cudaMalloc kann nicht mit einem Zeiger arbeiten, dessen Speicher bereits auf dem Gerät ist. Dies wird nicht funktionieren:
%Vor%, da ein Gerätezeiger (d_c) im Host-Code dereferenziert werden muss, was nicht erlaubt ist.
Tags und Links cuda