我正在编写一个采用不同图像尺寸的Halide程序。当我优化时,我在一些“子循环”中拆分一个循环,这样我就可以将它与给定的因子并行化。但是,对于小图像,如果图像小于分割因子,则可能会出现问题。或者,更准确地说,当循环中的迭代次数小于splitfactor时。
使用Halide::BoundaryConditions
处理超出界限,当然我可以使用if语句手动检查拆分因子,但Halide是否有类似于优化的BoundaryConditions的东西?
答案 0 :(得分:0)
如果我理解了你所说的话,那就是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