2013-05-15 22 views
5

Jocl (opencl Wrapper) Kernel läuft macht java3d Ausgabe deaktiviert. Wenn opencl beendet ist, läuft java3d weiter.Java-Applet: jocl-Operationen stoppen java3d

Wie kann ich Opencl (jocl) und opengl (java3d) zusammenarbeiten lassen? Ich brauche eine Art Befehl, der "seine Opencl-Zeit" sagt und wenn es fertig ist, sagt es "seine Opengl-Zeit jetzt".

Irgendwie friert java3D Jpanel ein und wird grau, wenn opencl funktioniert.

Ich habe einige Spuren und fand heraus, dass Java3D Opencl (jocl) belästigt, jmonkey engine 3.0 macht das nicht. Ein weiterer Versuch zeigte, dass jmonkey dasselbe tat. Plötzlich stoppen alle Partikelpositionen die Aktualisierung durch opencl, dann gehen alle Positionen 0,0,0.

Verwenden von eindeutigen Kontext, Programm, ID, ... für jedes Gerät.

Wie ein Fehler aussieht: Während die Galaxie glatt gerendert wird, werden plötzlich alle Teilchen auf eine Ebene projiziert, die ich wenige Sekunden nachdem das Flugzeug auf eine Linie projiziert wurde, projiziert und schließlich auf einen Punkt projiziert wird. All dies muss wegen der Puffer sein, die x [] y [] z [] für alle Elemente Null wird.

Edit: niedrigere GPU Betriebsfrequenzen machen den Fehler weniger häufig. Könnte dies die GPU härter als Furmark drücken, weil Berechnungen in lokalen durchgeführt werden, um schneller zu arbeiten? Oder ist dies ein Timing/Zugriff Prioritätsprobleme zwischen jocl/jmonkey/java3d? Alle anderen Programme einschließlich Furmark, sind stabil bei 1225 MHz (hd7870 Hawk), aber das ist wahrscheinlich stabiler bei nur 1000 MHz (AMD Standard von hd7870) oder sieht instabil aus, da Puffer durch Müllsammlung fehlerhaft zerstört werden ??

Aparapi (Opencl Wrapper für Java) war nie ein Problem und funktionierte gut bei 1200 MHz Sogar bekam einen "Treiber gestoppt funktioniert und erholte" Fehler. Katalysator 13.3 beta. Jocl 1.5.1 und müde 1.5.2. Catalyst 13.4 Whql macht das gleiche.

Setzen von System.gc(); kurz bevor die Kernel-Wiederholung Schleife sofort die fehlerhafte Sache macht, muss es eine Garbage Collection sein, was ich

verpaßt

Mit etwas Tracing: clCreateBuffer Verfahren hat ein Problem mit der Garbage Collection

Edit: Gelöst das Problem. Puffer, der von clCreateBuffer in Hauptthread erstellt wird, scheint als ein Müll (zu sammeln) für Unterthreads, wenn CL.CL_MEM_USE_HOST_PTR -Eigenschaft verwandt wird. CL.CL_MEM_COPY_HOST_PTR löst das Problem im Austausch von% 1-% 2 Leistungsverlust

Danke.

+0

Java3D können entweder OpenGL oder DirectX foudn werden. Nicht sicher, ob das hilft, aber es ist einen Versuch wert: '-Dj3d.Rend = d3d' – whiskeyspider

+0

Konnte nicht diese Arbeit bekommen. Ich denke, mein Treiber-Katalysator oder AMD-App-Paket ist korrupt. –

Antwort