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

时间:2015-05-10 07:12:46

标签: graphics opencl gpgpu raytracing large-data

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

这是我当前内核的外观。

__kernel void raytraceTheme(__global int* width, __global int*
    height, __global Triangle* triangles, __global int* triangleCount,
    __global float4* renderBuffer);

让我们说我有100K三角形,我的GPU需要大约98MB的RAM。要更新/删除/添加一些顶点,我必须在OpenCL上逐字释放所有顶点数据,在CPU中修改它们,而不是再次上传所有顶点数据。这是一个非常缓慢的过程。

我找到了解决方案而不限制我可以拥有多少三角形的解决方案;是为了填充我的数据并创建一个指针数组,以便我可以在光线跟踪时访问它们。如果三角形存储空间不足,我可以简单地重新分配一个(无论如何都不会花费太长时间)。制作如下内容。

__kernel void uploadTriangle(__global Triangle** triangleStorage, 
    __global Triangle* triangle, __global int* index)
{
    triangleStorage[index] = triangle;
}
__kernel void raytraceTheme(__global Triangle** triangleStorage,
    , __global int* chunkNum......)

但经过一些谷歌搜索和实验后,我发现OpenCL不支持内核参数中的双指针。我被卡住了。我不知道怎么能绕过这个。

0 个答案:

没有答案