我正在使用OpenCL实现算法。我将多次循环使用C++,并每次调用同一个OpenCL内核。内核将生成下一次迭代的输入数据和这些数据的数量。目前,我在每个循环中读回这个数字以用于两种用法:如何避免在OpenCL中回读
- 我使用这个数字来决定下一个循环需要多少个工作项目;和
- 我用这个数字来决定何时退出循环(当数字是0)。
我发现阅读需要大部分时间的循环。有什么办法可以避免它?
一般来说,如果您需要反复调用一个内核,并且退出条件依赖于内核生成的结果(不是固定数字循环),那么您如何有效地执行该操作?有什么像OpenGL中的遮挡查询,你可以做一些查询,而不是从GPU回读?
如果我启动很多工作项目(比如1000),并且其中大部分(比如说990)都不做任何事情。例如。他们测试一个条件并立即返回,如果它是假的。剂量它有类似的速度,只是启动10个工作项目?还是会慢得多? – redpearl 2012-07-20 19:46:10
我不明白为什么这会是一件坏事。只要没有回读,它应该只要工作组中最长的工作项目一样长,是正确的? – Ani 2012-07-20 19:47:31
我的真实程序比较复杂。我在每个循环中调用许多内核。我不认为有可能将整个循环的工作实现到内核中。 :( – redpearl 2012-07-20 19:54:43