Laden mehrerer Module in JCuda funktioniert nicht

n jCuda kann man cuda-Dateien als PTX- oder CUBIN-Format laden und aufrufen (starten)__global__ Funktionen (Kernel) aus Java.

Unter Berücksichtigung dessen möchte ich mit JCuda ein Framework entwickeln, das @ des Benutzers abruf__device__ Funktion in einem.cu Datei zur Laufzeit, lädt und führt es aus. Und ich habe bereits ein @ implementie__global__ -Funktion, bei der jeder Thread den Startpunkt der zugehörigen Daten ermittelt, eine Berechnung durchführt, die Initialisierung durchführt und dann @ des Benutzers aufru__device__ Funktion.

Hier ist mein Kernel-Pseudocode:

extern "C" __device__ void userFunc(args);
extern "C" __global__ void kernel(){

    // initialize

    userFunc(args);

    // rest of the kernel
}

Und Benutzer__device__ Funktion:

extern "C" __device__ void userFunc(args){
    // do something
}

Und auf der Java-Seite ist hier der Teil, mit dem ich die Module lade (Module bestehen ausptx Dateien, die mit diesem Befehl erfolgreich aus cuda-Dateien erstellt wurden:nvcc -m64 -ptx path/to/cudaFile -o cudaFile.ptx)

CUmodule kernelModule = new CUmodule(); // 1 
CUmodule userFuncModule = new CUmodule(); // 2
cuModuleLoad(kernelModule, ptxKernelFileName); // 3 
cuModuleLoad(userFuncModule, ptxUserFuncFileName); // 4

Wenn ich versuche, es auszuführen, erhalte ich einen Fehler in Zeile 3:CUDA_ERROR_NO_BINARY_FOR_GPU. Nach einigem Suchen bekomme ich das meinptx -Datei weist einen Syntaxfehler auf. Nach dem Ausführen dieses vorgeschlagenen Befehls:

ptxas -arch=sm_30 kernel.ptx

Ich habe

ptxas fatal : Unresolved extern function 'userFunc'

Auch wenn ich Zeile 3 durch 4 ersetze um @ zu lad userFunc Vor kernel Ich bekomme diesen Fehler. Ich steckte in dieser Phase fest. Ist dies der richtige Weg, um mehrere Module zu laden, die in JCuda miteinander verknüpft werden müssen? Oder ist es überhaupt möglich?

Bearbeiten

Zweiter Teil der Frage istHie

Antworten auf die Frage(2)

Ihre Antwort auf die Frage