我的文件是提前编译的。 我从图像中计算出小区域。在这些我想要重叠规范化。因此,我是一个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);
答案 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);