Java:投入或参考多维数组到一维数组

问题描述:

我有一个用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

这是我在做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