0
私のファイルはあらかじめコンパイルされています。 イメージから小さな領域を計算します。これらの上に私はオーバーラップで正規化したいと思います。したがって、私はFunc thats削減ドメインでの要因を計算します。 その後、重複している正規化されたリージョンを計算しようとします。したがって、結果はより大きなサイズを有する。 Funcが実現している限り、小領域は作業していますが、コンパイルしようとするともう作業しません。なぜなら、結果は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);