OpenCL中的Ray Tracer统一网格遍历

时间:2014-04-24 12:06:44

标签: raytracing

我尝试使用OpenCL创建实时光线跟踪器,但我对OpenCL很新,以及如何使用它。

作为加速光线追踪过程的一部分,我实现了一个统一网格,可以通过这里看到的DDA算法的形式遍历:http://www.cse.yorku.ca/~amana/research/grid.pdf

我的问题是,虽然我可以遍历网格并抓住单元格来检查对象,但我无法实际访问这些对象(它将内核构建发送到无限循环)。它们存在于数组中,但我认为这是由于GPU内联命令无法解析程序的方式。

以下是有问题的代码,其中' grid'是一个4D数组,表示为1D(第四维用于保存单元格中的每个对象),toAccess是包含在网格遍历期间遇到的对象ID的元素列表,caughtObjs是toAccess的大小(遇到的对象数量)和objList是我试图获得的对象ID列表。

for(int i = 0; i < caughtObjs; i++){
     objList[i] = grid[toAccess[i]]; //Commenting out this line stops the build crash
}

所以我假设在OpenCL中使用数组来引用另一个数组中的元素是不好的,因为它的内联。那么用于解决这个问题的常用替代方法是什么?

(另外,我知道你的意思是一次检查一个单元格但是我没有这样做,因为所需的循环深度也会破坏OpenCL的构建。)

0 个答案:

没有答案