Halide:将内存块复制到重叠位置(相同图像)

Halide: Copying a block of memory to an overlapping location (same image)

我需要将一个区域从纹理移动到另一个位置。如果这两个块不重叠,那那里就没有问题。我知道 Halide 是正确的解决方案,但我无法弄清楚如何在写入重叠像素之前等待读取......我可以根据移动方向迭代一种方式或另一种方式,但我不能找到一种在 Halide 中表达这一点的方法。卤素能看懂这些微妙之处吗?

反向迭代的方法是反转一个RDom:

RDom range(0, width);
f(width - range.x) = g(width - range.x); // Copy value going from higher addresses to lower.

(为此提供语法糖已经在待办事项列表上有一段时间了。我想我们也讨论了反向循环的调度指令。在那种情况下,您将使用 specialize 来决定哪个方向处理正确重叠并调度到适当的调度。然而,目前,从范围方法中减去 RDom 可能是唯一的选择。)