我正在尝试使用金属来实现硬件加速图像过滤器(任何感兴趣的人都可以进行接缝雕刻)。其中一个步骤涉及逐行运行代码,每行的计算取决于上一行的计算。然而,每行的计算可以按像素并行化。
一种方法是为每行调度一次内核,但我确信有更好的方法来做到这一点,因为这会导致大量开销。
有没有办法告诉Metal按什么顺序执行线程组?
没有。
根据我的经验,线程组总是并行运行。如果要按顺序执行线程组,请将每个线程组中的任务多次编码到单个 CommandBuffer 中。 CommandBuffer 中的所有命令都以串行方式运行。
这与您所说的“为每行调度一次内核”完全相同。