Graphics 在OpenCL光线跟踪中管理大量数据

Graphics 在OpenCL光线跟踪中管理大量数据,graphics,opencl,gpgpu,raytracing,large-data,Graphics,Opencl,Gpgpu,Raytracing,Large Data,我突然想到了OpenCL的一个问题。我目前正在CL中编写一个光线跟踪器。我遇到的问题是我有很多顶点,修改它们效率非常低 这就是我当前内核的外观 __内核void raytraceTheme\uuu global int*width,\uuu global int* 高度,_全局三角形*三角形,_全局整数*三角形计数, __全球浮动4*renderBuffer; 假设我有100K个三角形,在我的GPU中大约需要98MB的内存。要更新/删除/添加一些顶点,我必须释放OpenCL上的所有顶点数据,在C

我突然想到了OpenCL的一个问题。我目前正在CL中编写一个光线跟踪器。我遇到的问题是我有很多顶点,修改它们效率非常低

这就是我当前内核的外观

__内核void raytraceTheme\uuu global int*width,\uuu global int* 高度,_全局三角形*三角形,_全局整数*三角形计数, __全球浮动4*renderBuffer; 假设我有100K个三角形,在我的GPU中大约需要98MB的内存。要更新/删除/添加一些顶点,我必须释放OpenCL上的所有顶点数据,在CPU中修改它们,然后再次上传它们。这是一个极其缓慢的过程

我提出的解决方案是在不限制三角形数量的情况下解决这个问题;就是将我的数据分块并创建一个指针数组,这样我就可以在光线跟踪时访问它们。在三角存储空间用完的情况下,我可以简单地重新分配一个不会花费太长时间的存储空间。制作如下的东西

__内核无效上载三角形\全局三角形**三角形存储, __全局三角形*三角形,uu全局整型*索引 { 三角形存储[索引]=三角形; } __内核无效光线跟踪时间全局三角形**三角形存储, ,uuu全局int*chunkNum。。。。。。
但在谷歌搜索和实验之后,我发现OpenCL在内核参数中不支持双指针。我卡住了。我不知道如何绕过这个问题。

基本上找到了一种方法,这样我可以在不限制上传到OpenCL设备的最大数据量的情况下快速更新OpenCL中的大量数据。我不认为这是xy问题,因为我放弃了X和Y。它们都失败了。为什么你必须更改这些三角形?我不记得为什么光线跟踪器需要这样做,除非你正在编写一个交互式光线跟踪器,在创建模型时进行渲染。是的,它是一个光线跟踪器,具有动态改变场景中的内容的功能。我想你必须将某种增量发送到GPU,而不是整个场景。发送整个场景会使PCI express总线紧张。尝试将顶点数据拆分为对象或组,并仅发送正在更改的组。