是否可以使用带有Halide的外部库?

时间:2017-02-21 15:08:24

标签: halide

我想循环一个图像,对每个8x8补丁应用复杂的操作。举一个例子,假设我需要计算每个补丁的奇异值分解(SVD)并将第三个奇异值存储在输出图像中。是否可以将库(例如LAPACK用于SVD)与Halide一起使用?或者我应该将SVD算法编程为卤化物管道的一部分吗?

1 个答案:

答案 0 :(得分:2)

是的,您可以使用define external功能完成此操作。您可以在测试中遵循一个简单的示例:

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

基本模型是外部阶段作为函数出现,并且可以相应地在管道中进行调度(compute-at)。您编写的extern接口函数负责实际计算给定输入块的输出块,以及响应查询计算给定输出块所需的输入量。

这应该让你快速了解这个用例。

那就是说,考虑到你必须在这里解决的相对较小的恒定尺寸问题,你可能只需编写自己的简单8x8 SVD inline就可以获得良好的里程(在潜在的优化方面,针对不同的平台,如GPU等) Halide算法。