众所周知,当存在条件分支时,在 GPU 上运行的工作项可能会出现分歧。Apple 的OpenCL Programming Guide for Mac中提到了其中之一。
因此,算法的某些部分可能运行“单线程”,只有一个工作项在运行。当它特别是串行和长时间运行时,一些应用程序会将这些工作带回 CPU。
但是,这个问题仅涉及 GPU,并假设这些部分是短暂的。当这些“单线程”部分具有条件分支时,它们是否也会发散(如在执行真假代码路径时)?或者计算单元(或处理元素,无论你喜欢哪个术语)会跳过那些错误的分支?
更新
在回复评论时,我会删除 OpenCL 标记并将 Vulkan 标记留在那里。
我包括了 OpenCL,因为我想知道clEnqueueTask
和clEnqueueNDRangeKernel
with之间是否有任何区别dim=1:x=1
。该文件说它们是等效的,但我对此表示怀疑。
我相信 Vulkan 删除了将单线程任务入队的特殊功能是有充分理由的,如果我错了,请纠正我。