2012-08-01 52 views
1

我有一個用Java編寫的程序,涉及大量的多維數組。我嘗試使用JOCL(Op​​enCL)對其進行並行化,但多維數組必須在傳遞給OpenCL之前轉換爲單維數組。Java:投入或參考多維數組到一維數組

除了用一維數組重寫整個程序外,還有其他解決方案嗎?

+0

*多維數組必須轉換爲單維數組*是肯定的答案。將多維數組展平爲一個維度,將其傳遞給JOCL,並在返回時重新膨脹結果。還是我像往常一樣忽略了一些明顯的東西? – 2012-08-01 10:00:22

+0

@HighPerformanceMark我認爲除了複製整個數組外,沒有其他方法可以壓扁數組。在這種情況下,這是不可能的,因爲OpenCL內核在大規模循環中執行,並且數組大小爲500M〜2GB。我錯了嗎? – aaronqli 2012-08-01 11:06:59

+0

我不知道JOCL是甚麼,但Java沒有多維數組。它所有的都是數組的數組。所以你有一個平面陣列。這個平面數組的每個元素都是一個數組。 – 2012-08-01 11:34:25

回答

1

這是我在做C++時,我有多維數組:

for (int i = 0 ; i < n ; i++) { 
    queue.enqueueWriteBuffer(buffer, CL_FALSE, i*m*sizeof(int), m*sizeof(int), data[i]); 
} 

同樣,當我需要閱讀,只是在你的索引你的內核小心。

難道你不能在Java中做同樣的事嗎?

+0

謝謝。這是一個解決方案。我想通過這樣做,傳遞給內核參數的cl_mem不能再依賴主機指針了嗎? – aaronqli 2012-08-19 15:18:51