2013-05-15 37 views
5

Jocl(opencl wrapper)內核運行使得java3d輸出被禁用。當opencl完成時,java3d將繼續工作。Java applet:jocl操作停止java3d

我怎樣才能讓OPENCL(jocl)和OpenGL(Java3D的)一起工作?我需要一些能夠告訴「opencl時間」的命令,當它結束時它會告訴「現在它的開放時間」。

不知怎的,Java3D的JPanel的凍結,當OpenCL是工作變成灰色。

我做了一些跟蹤和發現,Java3D的是harrassing的OpenCL(jocl),jmonkey引擎3.0沒有做那。另一個嘗試顯示jmonkey做同樣的事情。突然所有粒子位置停止更新通過opencl然後所有職位去0,0,0。

爲每個設備使用獨特的上下文,程序,ID ...。

錯誤是怎麼樣的:當星系呈現平滑時,突然所有的粒子都被投影到我沒有創建的平面上,然後在飛機投影到一條線上幾秒鐘後,最後該線被投影到一個點上。所有這些必須是因爲緩衝區x [] y [] z []開始爲所有元素取零。

編輯:較低的GPU工作頻率使錯誤頻率降低。難道這會推動gpu比furmark更難嗎?因爲在本地進行計算可以更快地工作?或者這是jocl/jmonkey/java3d之間的定時/訪問優先級問題?包括furmark在內的所有其他程序都穩定在1225MHz(hd7870鷹),但只有在1000MHz(AMD默認的hd7870)時才更穩定,或者看起來不穩定,因爲緩衝區被垃圾收集故障破壞?

Aparapi(java的opencl包裝)從來沒有問題,並在1200MHz工作正常 甚至有一個「司機停止運作和恢復」的錯誤。催化劑13.3 beta。 Jocl 1.5.1和累1.5.2。催化劑13.4 whql做相同。

Putting System.gc();內核重複循環立即讓錯誤的事情之前,必須有一個垃圾收集的事情,我錯過

對於一些跟蹤:clCreateBuffer方法與垃圾收集

編輯一個問題:解決這個問題。在使用CL.CL_MEM_USE_HOST_PTR屬性時,由主線程中的clCreateBuffer創建的緩衝區對於子線程來說似乎是一種垃圾(將被收集)。 CL.CL_MEM_COPY_HOST_PTR解決了1%,2%的性能損失

感謝的交流問題。

+0

Java3D的可以使用OpenGL或DirectX。不知道這是否會有所幫助,但值得一試:'-Dj3d.rend = d3d' – whiskeyspider

+0

無法完成這項工作。我認爲我的驅動程序催化劑或amd應用程序包已損壞。 –

回答