Halide 中的高效收集内存访问

Efficient gather memory access in Halide

假设我想在两个图像之间进行操作(例如加法),其中图像 Img1 中的每个像素在图像 Img2 中都有对应的像素。对应向量存储在元组 Delta 中。基本上是这样的:

Img(x, y) = Img1(x, y) + Img2(x + Delta[0](x, y), y + Delta[1](x, y));

这是内存收集操作。在 Halide 中描述这种模式的最佳方式是什么?如何安排?

确实没有很好的安排时间的方法。收集速度很慢,即使存在收集说明。您可能仍然希望通过 x 对其进行矢量化,以便使用矢量完成寻址数学运算以及来自 Img1 和 Delta 的负载。我只会使用显而易见的东西:

Img.vectorize(x, 8).parallel(y, 4);