2017-02-21 71 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算法中。

相关问题