gpt4 book ai didi

c++ - Halide:将 C++ 函数传递给 Halide Func

转载 作者:太空狗 更新时间:2023-10-29 21:12:51 27 4
gpt4 key购买 nike

我有一张二值图像,我想使用 Halide 从图像的顶部开始为每一列找到第一个非零像素。

在 C++ 中,给定名为 mask 的图像,它看起来像这样:

vector<int> top_y;
top_y.reserve(mask.n_cols);
for (size_t x = 0; x < mask.n_cols; ++x) {
for (size_t y = 0; y < mask.n_rows; ++y) {
if (mask(y,x) != 0) {
top_y[x] = y;
break;
} else if (y == mask.n_rows-1) {
top_y[x] = mask.n_rows);
}
}
}

我见过这种 for, for, if 结构化循环的示例(例如使用 RDom::where 指令——参见 tutorial lesson 17 ),但是这种情况区别在于 break; 的使用。

考虑到外层循环的并行性质,也许可以将一个 C++ 函数(由内层循环函数组成,包括 break)传递给 Halide Func,然后在整个过程中实现该 Func图像的列。

如果是这样,您能否指导我举例说明如何实现?

最佳答案

你想要的可以在 (image(x, y) != 0) 上的纯 Halide argmax 中获得 - 它会返回第一个真值的索引。但这不会有中断行为。这是我们一直打算实现的优化,但我们还没有实现。

您可以使用 Func::define_extern 在任意 C++ 阶段进行干扰。您可以对它们使用 compute_at 以对某些消耗 Func 的每列进行外部调用,然后对消耗 Func 使用常规 Halide 调度以并行处理列。

有关 define_extern 用法的示例,请参阅:https://github.com/halide/Halide/blob/master/test/correctness/extern_stage.cpp

关于c++ - Halide:将 C++ 函数传递给 Halide Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com