2

我必须编写一个 OpenCL Marching Cubes 实现。

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

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

我正在编写 python 代码来加载 OpenCL __kernel,并且必须对顶点做一些其他的事情,所以它应该可以用 python 读取。这个想法是创建一个搅拌机插件。

4

1 回答 1

1

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

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

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

假设您在某些时候仍然内存不足。在这种情况下,您只需创建一个更大的缓冲区,将内存从旧缓冲区复制到新缓冲区并删除旧缓冲区。

我希望这会有所帮助。

于 2013-02-17T18:06:16.193 回答