2017-02-21 32 views
0

我想循環一張圖片,對每個8x8補丁應用一個複雜的操作。舉一個例子,假設我需要計算每個補丁的奇異值分解(SVD)並將第三奇異值存儲在輸出圖像中。是否可以與Halide一起使用庫(例如SVD的LAPACK)?還是應該將SVD算法編程爲我的鹵素管道的一部分?Halide可以使用外部庫嗎?

回答

1

是的,您可以使用定義的外部功能完成此操作。還有,你可以在測試中遵循一個簡單的例子:

https://github.com/halide/Halide/blob/master/test/correctness/extern_stage.cpp

的基本模式是,外部的階段出現的功能,並能在管道相應安排(計算-AT)。然後,您編寫的extern接口函數負責在給定一個輸入塊的情況下實際計算輸出塊,還負責響應查詢計算給定輸出塊所需的輸入量。

這應該讓你快速爲這個用例。這就是說,考慮到你需要在這裏解決的相對較小的恆定大小的問題,你可能會得到很好的里程數(就潛在的優化而言,針對GPU等不同的平臺等),只需編寫自己的簡單8x8 SVD即可在Halide算法中。

相關問題