0

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

4

1 回答 1

2

是的,您可以使用定义外部功能来做到这一点。您可以在测试中遵循一个简单的示例:

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

基本模型是外部阶段以函数的形式出现,并且可以在管道中进行相应的调度(compute-at)。然后,您编写的 extern 接口函数既负责在给定输入块的情况下实际计算输出块,也负责响应有关计算给定输出块需要多少输入的查询。

这应该让你快速完成这个用例。

也就是说,考虑到您必须在这里解决的相对较小的恒定大小问题,您可能只需在 Halide 算法中编写自己的简单 8x8 SVD 内联即可获得良好的里程(在潜在优化方面,针对 GPU 等不同平台) .

于 2017-02-21T18:10:39.983 回答