我正在用 OpenCL 实现一个算法。我将在 C++ 中循环多次,并且每次都调用同一个 OpenCL 内核。内核将生成下一次迭代的输入数据和这些数据的数量。目前,我在每个循环中读回这个数字有两种用途:
- 我使用这个数字来决定下一个循环需要多少工作项;和
- 我使用这个数字来决定何时退出循环(当数字为 0 时)。
我发现阅读花费了循环的大部分时间。有什么办法可以避免吗?
一般来说,如果你需要重复调用一个内核,并且退出条件依赖于内核生成的结果(不是固定数量的循环),你如何高效地做到这一点?有没有像 OpenGL 中的遮挡查询这样的东西,你可以只做一些查询而不是从 GPU 读回?