[jCuda] wie bekomm ich es zum laufen?

lordnaikon

Mitglied
schönen guten tag!

ich sitze jetzt schon 2 tage daran, und bekomm einfach mal nix zum laufen.
ich habe ein java programm, was ich gerne mit cuda ein wenig beschleunigen möchte(und mich einfach mal mit der cuda programmierung im allgemeinen). es geht aber leider gar nichts, so bin ich nun auf der suche nach hilfe.

mein system: win7 64bit; gtx260 tr. 197.13 64bit; cuda3.0 toolkit 64bit von hier(CUDA 3.0 Downloads)

alles brav installiert und mir jCuda(jcuda.org - Java bindings for CUDA) geladen, in der 64bit version.

in eclipse ein projekt aufgesetzt und einmal das "KernelLauncherSample" & "JCudaDriverCubinSample" importiert.
in den projekt properties unter "Java Build Path" die jCuda jars hinzugefügt und einmal die dll's direkt in das projektverzeichnis kopiert .. und einmal unter den umgebungsvariablem im PATH .. abgelegt

beides gibt mir diese fehlermeldung

Code:
Error while loading native library with base name "JCudaDriver"
Operating system name: Windows 7
Architecture         : x86
Architecture bit size: 32
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load native library
	at jcuda.LibUtils.loadLibrary(LibUtils.java:74)
	at jcuda.driver.JCudaDriver.<clinit>(JCudaDriver.java:96)
	at JCudaDriverCubinSample.main(JCudaDriverCubinSample.java:30)

was mach ich falsch .. und warum steht da "Architecture bit size: 32"
 

lordnaikon

Mitglied
ahh .. ok

ich hab jetzt mal die kompilierte version (cubin) des cu files rausgeschmissen und dann meldet er
Code:
Executing
nvcc -m32 -arch sm_11 -cubin JCudaCubinSample_kernel.cu -o JCudaCubinSample_kernel.cubin
nvcc process exitValue -1
errorMessage:
nvcc fatal   : Cannot find compiler 'cl.exe' in PATH

outputMessage:

Exception in thread "main" java.io.IOException: Could not create .cubin file: nvcc fatal   : Cannot find compiler 'cl.exe' in PATH

	at JCudaDriverCubinSample.prepareCubinFile(JCudaDriverCubinSample.java:218)
	at JCudaDriverCubinSample.main(JCudaDriverCubinSample.java:27)

ok .. also anscheinend muss ich jCude noch dazu bringen die parameter in "nvcc -m32 ..." -> "nvcc -m64" oder so zu bringen
und anscheinend scheint was mit der cl.exe nicht zu stimmen .. werd erstmal VS08 (hab gerade nur die express variante drauf, die vielleicht bissl zerhackstückelt wurde in lezter zeit) runterladen und es neu installieren .. kann cuda schon VS10 .. dann würd ich das auch gleich mal runterladen

meld mich dann nochmal wenn ichs runtergeladen und installiert habe.

(aber leider merkt man sowas erst, wenn man das mal in worte gefasst und in ein forum geschrieben hat)
 

Marco13

Top Contributor
Der KernelLauncher ist erstmal nur eine Beispielklasse, und gehört nicht zur "offiziellen" API von JCuda (allerdings bastle ich schon an einem Utilities-Package, wo der dann auch nochmal drin sein wird - leicht geändert, aber die eigentliche Funktionalität bleibt natürlich so, wie sie ist).

Wenn du Visual Studio schon installiert hast, sollte er eigentlich die CL.EXE finden. Das hat übrigens nichts mit JCuda zu tun: Der KernelLauncher ruft nur den NVCC auf, und der braucht im Hintergrund einen C-Compiler. Man könnte (und würde, wenn man nicht den KernelLauncher verwenden wollte) die .CU-Datei an der Kommandozeile "per Hand" mit dem NVCC zu einer .CUBIN compilieren. Das kannst du evtl. auch mal versuchen: Wenn du sicher bist, dass die CL.EXE im 'PATH' liegt, kanst du
[c]nvcc -cubin Kernel.CU -o Kernel.CUBIN[/c]
eintippen. Die entstehende CUBIN-Datei kann man dann auch mit dem KernelLauncher verwenden, dabei kann dann aber weniger schiefgehen, weil er ja nicht mehr compilieren muss, und man Compilier- oder Setup-Fehler schon vorher erkennt.

Das
Code:
Architecture         : x86
Architecture bit size: 32
könnte noch wichtig sein: Offenbar hast du eine 32bit JVM installiert. Du solltest dir die 64bit-JVM installieren, sonst wird er die DLL nicht laden können. (Es kann auch sein, dass du die 64bit-Version schon installiert hast, aber im PATH noch der Pfad zur 32bit-Version steht)
 

lordnaikon

Mitglied
"allerdings bastle ich schon an einem" .. bist du zufällig einer der entwickler?

vielen lieben dank erstmal für die antwort!

also lange rede kurzer sinn. es lag an den verwurschtelten PATH und vs 08 sachen.. sry lag komplett auf meiner seite! .. für die uni musste ich mal mit XNA was programmieren .. und unser prof bestand darauf mit vc08 express zu arbeiten, obwohl wir von der uni die "echten" kostenlos beziehen konnten, da musste ich was bei den path sachen rummwurschteln.

ja und natürlich habe ich ein JVm in 32 bit drauf .. bin ich auch gerade drauf gekommen, und da ich das nicht in 64bit ändern will(ich muss für arbeit in 32bit arbeiten) und ich gerade ncith weiß wie man beide parallele laufen lässt, hab ich jetzt alles wieder auf 32 bit umgestellt, alles in vc & path bereinigt

und siehe da
Code:
Executing
nvcc -m32 -arch sm_11 -cubin JCudaCubinSample_kernel.cu -o JCudaCubinSample_kernel.cubin
nvcc process exitValue 0
Test PASSED

ein Indiz dafür das es läuft? .. ich hoffe doch sehr :)

und da hier welche mit ahnung vorbeischauen ... kurze frage am rande. wie distribute ich jCuda sachen? müssen da wo ich das programm laufen lassen will, die cudatools installiert sein ? ... also wenn ich die sachen in ein cubin compiliert habe brauch ich ja kein cl.exe und nvcc mehr ... kann jCuda das dann "starten" wenn nur, die "cuda enabled drivers" installiert sind? ... müssen diese "native dlls" auch mitgeliefert werden ..

schönen dank erstmal und sry wegen dem eigentlich unötigen posts. aber wenn man sich erstmal seinen kummer von der seele geschrieben hat .. gehts irgendwie erst weiter und mann kommt auf die idee mal an anderen stellen weiter zu werkeln

mit freundlichen grüßen
 

Marco13

Top Contributor
"allerdings bastle ich schon an einem" .. bist du zufällig einer der entwickler?

Öh... ich ignoriere mal das Wort "einer", und antworte mit: Ja. :)

und siehe da
Code:
Executing
nvcc -m32 -arch sm_11 -cubin JCudaCubinSample_kernel.cu -o JCudaCubinSample_kernel.cubin
nvcc process exitValue 0
Test PASSED

ein Indiz dafür das es läuft? .. ich hoffe doch sehr :)

Ja, "PASSED" ist immer gut :)



wie distribute ich jCuda sachen? müssen da wo ich das programm laufen lassen will, die cudatools installiert sein ? ... also wenn ich die sachen in ein cubin compiliert habe brauch ich ja kein cl.exe und nvcc mehr ... kann jCuda das dann "starten" wenn nur, die "cuda enabled drivers" installiert sind? ... müssen diese "native dlls" auch mitgeliefert werden ..

Ich bin bisher nicht davon ausgegangen, dass jemand JCuda-Programme wirklich an Leute verteilen will, die man als "Endanwender" bezeichnen würde, sondern bestenfalls an andere Entwickler. In den NVIDIA CUDA-Foren tauchen manchmal ähnliche Fragen auf, da sollte man vielleicht auch mal vorbeischauen. Aber allgemein:

- Der Benutzer braucht den CUDA Treiber und das Toolkit. Das auch in der passenden Version - ich hatte schon überlegt, wie man das ganze weniger Versionsspezifisch machen könnte: Seit Version 3.0 ist NVIDIA dazu übergegangen, die Versions- und Build(!)-Nummer in den Dateinamen der Libraries zu codieren, vielleicht könnte man darauf aufbauen, und das auch für die JCuda-DLLs übernehmen...

- Nochmal: Der KernelLauncher sollte in erster Linie das ganze (IMHO schon etwas... fummelige) Setup der Kernel-Parameter (mit "cuParamSetv" und den passenden Alignments) einfacher machen, und einem nebenbei auch noch den Umweg über den NVCC an der Kommandozeile ersparen. Nicht zuletzt, um denjenigen den "Einstieg" zu erleichtern, die schnell und ohne Krämpfe ihre ersten kleinen Kernel schreiben wollen. Wenn man eine Anwendung deployen will, würde man aber höchstens(!) die Funktionalität verwenden, die mit [c]KernelLauncher#load[/c] angeboten wird: Damit kann man eine (vorher compilierte) CUBIN-Datei laden, und den KernelLauncher dann für die Aufrufe verwenden. Die Methoden [c]KernelLauncher#compile[/c] und [c]KernelLauncher#create[/c] erstellen die CUBIN aber jedes mal zur Laufzeit, und erfordern den NVCC und ein VisualStudio - sind also nur für einen (angehenden) Entwickler sinnvoll.

- Der Benutzer braucht auch die nativen DLLs, passend zu seinem Betriebssystem.

Zusammengefasst: Wenn man eine JCuda-Anwendung weitergeben will, braucht man im Allgemeinen
- Die JAR mit der Anwendung
- Die CUBIN der Anwendung passend zum Zielsystem (kann wohl auch in der JAR stecken)
- Die JCuda JARs
- Die JCuda DLLs passend zum Zielsystem
- Driver und Toolkit auf dem Zielsystem

Ich weiß, dass es Mechanismen gibt, um das ganze etwas... flexibler oder einfacher handhabbar zu machen: Man kann auch mehrere DLLs in ein Archiv packen, und das ganze (wie bei Webstart) als Paket deployen (so ähnlich wird das bei anderen Bibliotheken wie z.B. JOGL angeboten), aber da muss ich mich erst noch ein bißchen einlesen, und genauer schauen, wie das im Detail geht...
 

lordnaikon

Mitglied
Marco13 hat gesagt.:
Öh... ich ignoriere mal das Wort "einer", und antworte mit: Ja.
du musst verzeihen, ich kenn DEIN projekt zwar schon ne weile, wirklich aktiv damit auseinander gesetzt hab ich mich erst seit gestern :) .. und auf deiner seite stellst du dich ja leider nicht vor ;)


Marco13 hat gesagt.:
Ja, "PASSED" ist immer gut
jo :) .. ich hab zwar schon nen bissl rummgespielt .. muss jetzt wohl aber erst mal die nvidia pdfs bezüglich der architektur lesen .. das mit den grids, blocks, threads halt .. warum weshalb usw. macht aber schon tierisch spaaß ! :)


Marco13 hat gesagt.:
Der Benutzer braucht den CUDA Treiber und das Toolkit
wäre das auch der fall wenn ich mein programm jetzt in c/c++ schreiben würde .. sry die blöde frage aber das iss doch totaler mist von seiten nvidia's. das ist ja sicherlich jetzt nicht von JCuda als bindig abhänig. aber mir ist's wurscht kommts halt ruff .. wer schnell will muss halt was installieren :D

zum KernelLauncher .. klasse teil! das ziel des einfachen einstiegs bestens erfüllt! im allgemeinen noch mal von mir nen großes lob :) auch in sachen "support"! waren jetzt keine schwerwiegenden fehler, aber immer mal schön, wenn sich die entwickler zeit für ihre anfänger nehmen, danke!

das war halt auch mein gedanke, natürlich nicht die cubin beim anwender neu zu kompilieren, sonder fertig mitzuschicken. bin zwar noch lange nicht soweit, wollt es halt nur mal aus ersten hand wissen, wo ich dich schon mal an der "hand" hatte :)

vielen lieben dank für die investierte zeit und die beantwortung der fragen, ich kann mich gar nicht oft genug bedanken!

jetzt muss ich ersmal mein kleines testprojekt fertig machen damit ich da mit cuda bissl spielen kann. wollte meinen software renderer bissl auf die spünge helfen, da dass verwenden von java threads und cpu immernoch lahm ist. mal sehen ob ich da mit cuda was machen kann ... software renderer auf cuda, schön blöd wa? :D .. aber das dient nur zur vorbereitung für nen raytracer in cuda .. bis dahin iss aber wohl noch bissl cuda übung nötig :)

bis die tage!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
B JCuda Allgemeine Java-Themen 9
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
S Swing Tasks die regelmaessig alleine laufen Allgemeine Java-Themen 3
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
M Methoden Operation auslagern und "nebenbei" laufen lassen Allgemeine Java-Themen 3
B JAVA Prozesse in einer eigenen Anwendung laufen lassen Allgemeine Java-Themen 9
G Programm dauerhaft laufen lassen Allgemeine Java-Themen 4
P OSGi Bundle in JBoss zum laufen bringen Allgemeine Java-Themen 0
B Best Practice SWT Programm auf dem Mac laufen lassen Allgemeine Java-Themen 7
I Echtzeitcharts laufen nicht Allgemeine Java-Themen 10
H Shellskript von JAVA aus laufen lassen? Allgemeine Java-Themen 4
T auch bei neustart laufen... Allgemeine Java-Themen 3
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
S Endlos laufen lassen Allgemeine Java-Themen 9
T Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ? Allgemeine Java-Themen 22
M JAVA Anwendungen laufen auf WIN7 64bit nicht Allgemeine Java-Themen 6
nrg Java Observer in SysTray laufen lassen / Console schließen Allgemeine Java-Themen 2
F Programm in regelmäßigen Abständen laufen lassen Allgemeine Java-Themen 6
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
D OpenOfficeSDK Examples laufen nicht Allgemeine Java-Themen 5
A Wie lasse ich mein Programm als Daemon laufen? Allgemeine Java-Themen 4
G java Programm im Hintergrund laufen lassen Allgemeine Java-Themen 8
P Java 6 kompilierte programme laufen die auch unter JRE 1.4.x Allgemeine Java-Themen 43
S Bild durchs Label laufen Allgemeine Java-Themen 14
M Appletwebsite auf dem Windows Server 2003 IIS laufen lassen Allgemeine Java-Themen 7
Chris_1980 Applets laufen bei mir nicht im IE 7 Allgemeine Java-Themen 2
G Applet mit Sockets und TableLayout will nicht laufen Allgemeine Java-Themen 3
73x JAR file mit zusätzlicen Libraries zum Laufen bringen Allgemeine Java-Themen 6
P Java - Application auf Debian System zum laufen bringen Allgemeine Java-Themen 11
S Java Programm soll im Hintergrund laufen (vgl. fork() bei C) Allgemeine Java-Themen 10
V MySql db unter Java zum laufen bringen. Allgemeine Java-Themen 2
B nur eine Instanz eines Programms laufen lassen Allgemeine Java-Themen 8
C Programm aus einer jar-File zum laufen bringen Allgemeine Java-Themen 13
T Programm auf niedriger Priorität laufen lassen Allgemeine Java-Themen 4
Z Java Programme laufen nicht zusammen Allgemeine Java-Themen 9
D Laufen meine alten progs auf java 5 noch? Allgemeine Java-Themen 7
A wie bekomme ich Applikation zum Laufen Allgemeine Java-Themen 3
P iText unter Linux zum Laufen bringen Allgemeine Java-Themen 4
A Socket-Server ohne Terminal laufen lassen [Windows] Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben