我要写一个OpenCL Marching Cubes实现。
Marching Cubes算法获取体积数据并从中创建等值面。 这个过程需要很长时间,所以我要在OpenCL中用n个线程编写它以提高性能。
我已经有了代码,但我的问题是,存储顶点。据我所知,我需要知道算法将创建多少顶点来分配足够的内存,但这个数字是未知的。 有没有办法创建一个动态数据结构,如vector或带有追加函数的numpy.array或类似的东西。
我正在编写python代码来加载OpenCL __kernel,并且必须对顶点执行其他一些操作,因此它应该可以用python读取。我们的想法是创建一个blender插件。
答案 0 :(得分:1)
据我所知,OpenCL不允许任何类型的动态内存管理。 其中一个原因是GPU的工作方式。使OpenCL代码只在CPU上工作,而不是在GPU上工作不是OpenCL背后的想法。
您可以通过以下方式解决问题:
让我们说你在某些时候仍然会耗尽内存。在这种情况下,您只需创建一个更大的缓冲区,将内存从旧内存复制到新内存并删除旧内存。
我希望这会有所帮助。