2017-07-12 96 views
0

我試圖將resize app從halide存儲庫中從內聯聲明轉換爲生成器。一切似乎都做工精細,除了這一點:在Halide中沒有名爲dim的成員:: GeneratorInput <Halide :: Func>

Func clamped = BoundaryConditions::repeat_edge(input);` 

在原代碼,input聲明像這樣ImageParam input(Float(32), 3)。在我的發生器中,我將它翻譯爲:Input<Func> input { "input", Float(32), 3 }。然後我用與原始代碼完全相同的方式聲明clamped。編譯時,我得到這個錯誤:

Halide.h:15202:50: error: no member named 'dim' in 'Halide::GeneratorInput<Halide::Func>' 
    object_bounds.push_back({ Expr(func_like.dim(i).min()), Expr(func_like.dim(i).extent()) }); 
            ~~~~~~~~~^

有沒有辦法對一個Input<Func>創建BoundaryConditions::repeat_edge

回答

1

有,將它與一個Buffer <相關聯。 (可能是你的情況下的緩衝區,試試吧)。

struct MyGen : Generator<MyGen> { 
    Input<Buffer<>> dim_only_input_buffer{ "dim_only_input_buffer", 3 }; 
    ... 
    }; 

我碰到了類似的東西,你可以看到更多關於這本github issue

1

Input<Func>的想法是,它可能與另一個Func一起組成發生器時實例化。 (例如,一個發生器的輸出可能是另一個發生器的輸入,而所有連接的發生器的圖形被編譯爲單個Halide程序。)問題是Funcs沒有像Buffers那樣的固定界限。因此不能要求(例如)Func的寬度。

對於設計爲始終與具體存儲器一起使用的發電機,可以使用輸入。爲了在輸入上施加邊界條件,邊界需要作爲顯式參數傳遞給生成器。例如。作爲其他Inputs