卤化物检查是否可以拆分

Halide check if split is possible

我正在编写一个采用不同图像尺寸的 Halide 程序。当我优化时,我将一个循环拆分为多个 "sub loops",这样我就可以将其与给定的因子并行化。然而,对于小图像,如果图像小于分割因子,这可能是个问题。或者,更准确地说,当循环中的迭代次数小于 splitfactor 时。

读取越界是使用 Halide::BoundaryConditions 处理的,当然我可以使用 if 语句手动检查拆分因子,但是 Halide 是否有类似于 BoundaryConditions 的优化?

如果我理解正确的话,那么这就是 Func::specialize 的目的。你可以这样做:

// Only vectorize if output is large enough
f.specialize(f.output_buffer().width() > 8).vectorize(x, 8);

Halide sgemm 使用了这一堆:https://github.com/halide/Halide/blob/master/apps/linear_algebra/src/blas_l3_generators.cpp