我有一个 opencl 内核批处理类,该类将 40 多个内核排入队列,并且每个内核执行之间都有一个 clFinish() 。
问题:当我注释掉 clFinish()s 然后程序运行速度提高 %100 时,这是否意味着当内核使用相同的缓冲区进行写入和读取时,内核之间存在未定义的行为?我怀疑性能提升来自更好地利用 gpu/占用资源。使用有序命令队列是否保证了两个内核之间的屏障,或者我需要它们之间的 clFinish() 吗?
它是一个简单的物理模型,两个版本之间没有可见的差异。
也许我只需要在最后使用 clFinish() ?
编辑:此命令队列未使用 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE。