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