我正在执行 Otsu的方法(链接https://en.wikipedia.org/wiki/Otsu%27s_method),以确定原始帧中有多少黑色像素。我正在尝试优化流程,我想用 OpenCL 来实现。有没有办法将单变量传递给OpenCL内核并增加它,而不是在没有必要时传递整个缓冲区?
答案 0 :(得分:5)
您想要解决的问题非常类似于全球缩减。虽然您可以使用单个输出变量和原子读取/修改/写入访问,但它会非常慢(由于原子上的争用),除非您计算的东西非常稀疏(这里不是这种情况)。因此,您应该使用与还原相同的技术,即并行执行部分求和,然后将它们合并在一起。 Google for" OpenCL减少"并且您会找到一些很好的例子,例如:https://developer.amd.com/resources/articles-whitepapers/opencl-optimization-case-study-simple-reductions/