2016-08-22 12 views
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); 

答えて

0

は、一つには、bc_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); 

またはブロックごとに1つだけ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); 
のために言うことを意味し
関連する問題