在 OS X OpenCL CPU 运行时,这里的文档表示“工作项目安排在提交给 Grand Central Dispatch 的不同任务中”。这似乎表明工作组本质上是无操作的,你应该为(工作项数)=(硬件线程数)而(工作组数)无关紧要。然而,在其他实现中,同一工作组中的项目之间通过本质上的协程(setjmp 和 longjmp)进行低成本切换,这将使安排更多工作项目的成本大大降低(因为您避免了完整的操作系统管理的线程项目之间的上下文切换),这反过来将更容易在 CPU 和 GPU 目标之间重用代码。根据“使用 OpenCL 进行异构计算”,AMD 的 CPU 运行时会这样做,我隐约记得一些文档表明英特尔也是如此。
任何人都可以确认 OS X CPU 运行时中工作组的行为吗?