OpenCL动态数据结构

时间:2012-06-18 10:11:21

标签: arrays dynamic storage opencl

我要写一个OpenCL Marching Cubes实现。

Marching Cubes算法获取体积数据并从中创建等值面。 这个过程需要很长时间,所以我要在OpenCL中用n个线程编写它以提高性能。

我已经有了代码,但我的问题是,存储顶点。据我所知,我需要知道算法将创建多少顶点来分配足够的内存,但这个数字是未知的。 有没有办法创建一个动态数据结构,如vector或带有追加函数的numpy.array或类似的东西。

我正在编写python代码来加载OpenCL __kernel,并且必须对顶点执行其他一些操作,因此它应该可以用python读取。我们的想法是创建一个blender插件。

1 个答案:

答案 0 :(得分:1)

据我所知,OpenCL不允许任何类型的动态内存管理。 其中一个原因是GPU的工作方式。使OpenCL代码只在CPU上工作,而不是在GPU上工作不是OpenCL背后的想法。

您可以通过以下方式解决问题:

  • 创建一个巨大的内存缓冲区。你可能要求它更大。
  • 当你有一个新的顶点时,只需将它附加到缓冲区中的最后一个附加位置。
  • 继续这样。

让我们说你在某些时候仍然会耗尽内存。在这种情况下,您只需创建一个更大的缓冲区,将内存从旧内存复制到新内存并删除旧内存。

我希望这会有所帮助。