0

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

1 に答える 1