【问题标题】:Java: Cast or reference multidimensional array into single dimensional arrayJava:将多维数组转换或引用为一维数组
【发布时间】:2012-08-01 09:52:03
【问题描述】:

我有一个用 Java 编写的程序,其中涉及大量的多维数组。我正在尝试使用 JOCL (OpenCL) 对其进行并行化,但在传递给 OpenCL 之前,必须将多维数组转换为一维数组。

除了用一维数组重写整个程序,还有其他的解决办法吗?

【问题讨论】:

  • @HighPerformanceMark 我认为除了复制整个数组之外,没有其他方法可以展平数组。在这种情况下这是不可能的,因为 OpenCL 内核是在一个巨大的循环中执行的,并且数组有 500M~2GB 大。我错了吗?
  • 我不知道 JOCL 是什么或做什么,但 Java 没有多维数组。它所拥有的只是数组的数组。所以你实际上有一个平面阵列。这个平面数组的每个元素都是一个数组。
  • @JBNizet 在这种情况下,我想最好的解决方案是将所有数组更改为平面数组并使用复杂的索引使其“多维” - 我想我可以编写一个脚本来大规模创建索引函数和将每个多维索引替换为一维等效索引。

标签: java parallel-processing opencl gpgpu jocl


【解决方案1】:

当我有多维数组时,这是我在 C++ 中所做的:

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

当我需要阅读时也是如此,只是在你的内核中小心你的索引。

你不能在 Java 中做同样的事情吗?

【讨论】:

  • 谢谢。这是一个解决方案。我想通过这样做传递给内核参数的 cl_mem 不能再依赖主机指针?
猜你喜欢
  • 2023-03-26
  • 2019-06-29
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 2015-01-06
相关资源
最近更新 更多