2017-06-12 50 views
0

我正在使用Halide作爲C++代碼庫的某些部分。我有一個AoT編譯函數,它計算一個Tuple-valued Func,所以它被編譯爲buffer_t結構,作爲之前函數的輸入(現在編譯爲halide_buffer_t)。在我調用庫.cpp文件,如下我定義這些buffer_t值:使用Tuple與Halide AoT編譯

result1.host = (uint8_t*)result_cpp_array; 
    result1.elem_size = sizeof(float); 
    result1.stride[0] = 1; 
    result1.min[0] = 2; 
    result1.min[1] = 2; 
    result1.min[2] = 2; 
    result1.stride[1] = size_x + 1; 
    result1.stride[2] = (size_y + 1) * (size_x + 1); 
    result1.extent[0] = size_x - 3; 
    result1.extent[1] = size_y - 3; 
    result1.extent[2] = size_z - 3; 

    int error = function_aot_halide(/*list of inputs*/, &result1, /*other results similar to result1*/); 

我有這部分代碼來映射緩衝器到C++陣列,其中我想存儲的結果,而且我還需要min和extent的值來讓函數在數組的一部分而不是整個數組上實現。 這與舊版本的Halide正常工作,但它不適用於新的鹵化物緩衝區。用新的緩衝區實現做同樣的事情最好的辦法是什麼?

回答

0

你應該使用Halide::Runtime::Buffer,除非你有一個很好的理由不要(比如有限的或者沒有C++的支持)。由於你的數據沒有緊密排列,所以你必須向Buffer解釋。

halide_dimension_t result_shape[3] = 
    { { 2, size_x - 3, 1 } 
    , { 2, size_y - 3, size_x + 1 } 
    , { 2, size_z - 3, (size_y + 1) * (size_x + 1) } 
    }; 
Halide::Runtime::Buffer<float> result_buffer(result_cpp_array, 3, result_shape); 
result_buffer.set_host_dirty();