在读取之前OpenCL清理输出

时间:2016-10-12 13:50:37

标签: opencl

我是OpenCL的新手,我在某些方面陷入困境,我自己无法提出一个好的解决方案。 以下场景:我确实为交叉计算编写了一个内核,它运行得很好。我有很多光线和许多线条。我正在计算,每条线对每条线发生交叉,如下所示:

    foreach ray{
            foreach line{
                    pointXY = calculateIntersectionpoint();
                    }
            }

现在让我们假设我输入了总共25000条光线和500条线,理论上我可以有12500000个交叉点。

然而,实际上并非如此。如果没有发生交叉,我的计算只会将交点设置为[0,0]。 现在我的问题是我有一个大小为12500000的输出阵列或(射线*线),其中大部分都包含零。之后我会找出没有交叉确实发生的点 - 但这是非常昂贵的,因为我的大部分申请时间都是通过整理这些点来浪费的。

我会从设备中读回结果,如下所示:

queue.enqueueReadBuffer(intersectionpointBuffer, CL_TRUE, 0, sizeof(cl_long2) * numberOfRays * numberOfLines, &intersectionPoints[0]);

现在我的问题是:有没有办法让可变大小的输出和" push_back"输出,每次我的内核找到一个交叉点? 如果不是这样,你有什么建议我可以解决这个问题吗? 我已经考虑过将输出留在设备上并在另一个内核中进行排序 - 然后切断我不感兴趣的区域。虽然我还不确定如何实现它。

如果这是相关的:我使用的是OpenCL 1.1,我的设备是Quadro 600,我使用的是opencl c ++包装器。

提前谢谢

0 个答案:

没有答案