创建固定维度Halide管道

时间:2016-08-22 11:26:48

标签: c++ halide

我的文件是提前编译的。 我从图像中计算出小区域。在这些我想要重叠规范化。因此,我是一个Func,用于计算减少域的因子。 然后我尝试计算重叠的规范化区域。结果因此具有更大的尺寸。只要Func我意识到它是小区域的工作,当我尝试编译为b它不再工作,因为结果必须有另一个维度作为c所需的维度。 有没有办法根据输入或输出缓冲区尺寸设置Func的尺寸?或者你知道其他任何解决方法吗?

    Func    cells("cells");
    c(g_x,g_y,g_i) = 0.0f;

    // this is working 
    c(g_x, g_y, g_i) = ...

    Var c_x("c_x"), c_y("c_y");
    // calculate normalization factor
    Func norm_factor("norm_factor");
    // cpb means cells per block
    RDom cbd (0,cpb,0,cpb,0, nBins);

    Expr    lx = c_x + cbd.x; 
    Expr    ly = c_y + cbd.y; 
    Expr    lz = cbd.z;

    norm_factor(c_x, c_y)       = 1 / sqrt(Halide::sum(c(lx, ly, lz) * c(lx, ly, lz)) + eta*eta );

    // Caculate the normalized Blocks
    Func b("blocks");

    b(c_x,c_y,g_i)     = 0.f;
    b(c_x, c_y, g_i)   = norm_factor(g_x, g_y) * c(g_x,g_y,g_i);

    b.compile_to_file("halide",args);

1 个答案:

答案 0 :(得分:0)

首先,使用b定义c_x, c_y, g_i,但定义中未使用Vars

可能你想说

b(c_x, c_y, g_i)= norm_factor(c_x, c_y) * c(c_x, c_y, g_i);

或每个块只有一个b

b(c_x, c_y, g_i)   = norm_factor(c_x * cpb, c_y * cpb) * c(c_x * cpb, c_y * cpb, g_i);