2016-06-16 2 views
0

Angenommen, ich möchte CUDAs untergeordnete Treiber-API für einige Quellen verwenden, die ich geschrieben habe. Ich weiß über cuLaunchKernel, aber ich kann nicht scheinen, in den Dokumenten die genaue Erklärung zu finden, wie Sie das cuFunction erhalten, um es von Ihren __global__ Funktionen zu übertragen.Wie bekomme ich eine cuFunction von einer __global__ Funktion, die ich geschrieben habe?

+3

werfen Sie einen Blick auf die CUDA-Beispielcodes, die die Treiber-API verwenden, z. B. [vectorAddDrv] (http://docs.nvidia.com/cuda/cuda-samples/index.html#vector-addition-driver-api). Das Projekt ist so eingerichtet, dass es den Kernel ("__global__" -Funktion in vectorAddDrv_kernel.cu) nach ptx kompiliert und der Kernel in ptx-Form über eine API-Sequenz in der vectorAddDrv.cpp-Datei geladen wird. Der [Treiber-API-Abschnitt] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#driver-api) des Programmierleitfadens wird auch als Referenz nützlich sein. –

Antwort

4

Sie verwenden cuModuleGetFunction. Der übergebene Funktionsname muss der fehlende C++ - Name sein, wenn Sie keine C-Verknüpfung verwenden. Sie können dies mithilfe von cuobjdump auf einer kompilierten Version Ihrer Gerätequelle abrufen.

+0

Aber _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – einpoklum

+0

Sie laden entweder eine vorkompilierte Binärdatei aus einer kubischen oder fetten Binärdatei, die Sie a priori erstellen, oder PTX-Code, den Sie entweder geschrieben oder aus der Quelle kompiliert haben. Sie können auch eine Runtime Device Linker-Sitzung initiieren, wenn Sie über Gerätecodebibliotheken verfügen, mit denen eine Verknüpfung hergestellt werden kann. – talonmies

+0

Ich bekomme es, aber kann ich meine ausführbare Datei nicht irgendwie meine fette binäre sein? Ich meine, das ist, was die Laufzeit-API im Wesentlichen tut, oder? – einpoklum

Verwandte Themen