私のファイルは事前にコンパイルされています。画像から小さな領域を計算します。これらの上で、オーバーラップで正規化したいと思います。したがって、Reduction Domains で係数を計算する 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);