卤化物:将C 功能传递到卤化物弹性中
Halide: Passing a C++ function into a Halide Func
我有一个二进制图像,想从图像的顶部开始使用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
指令 - 请参见教程17),但是这种情况因使用break;
而有所不同。
鉴于外循环的平行性质,也许可以传递C 函数(由内部循环函数,包括break
组成)到卤化物功能,然后在图像的所有列上意识到该功能。p>如果是这样,您可以将我带到如何实现的示例吗?
您想要的东西可以在(图像(x,y)!= 0)的纯Halide argmax中获得 - 它将返回第一个真实值的索引。但这不会具有休息行为。这是我们一直在实施的优化,但我们还没有。
您可以使用func :: Define_extern在任意C 阶段堵塞。您可以在它们上使用compute_at进行每列的外部呼叫,然后在消耗函数上使用常规的卤化物调度来平行于列。
有关Define_extern用法的示例,请参见:https://github.com/halide/halide/halide/blob/master/master/test/correctness/correctness/extern_stage.cpp
相关文章:
- 彩色图像的卤化物处理平均值
- 具有 GPU 时间表的卤化物产生黑色图像
- 卤化物:X86汇编代码生成
- 更快地将卤化物图像转换为 opencv 垫?
- 卤化物::GPU 上的缓冲区
- 有没有办法将两个输入图像堆叠到卤化物发生器中的单个 4 维缓冲区中?
- 定义一个带有缓冲区的函数作为卤化物中的边界框参数
- 卤化物:较大图像的去马赛克算法错误.似乎适用于 16x16 图像
- 如何使以下卤化物代码更加高效
- 如何让卤化物使用滑动窗口优化?
- 卤化物最佳计划
- 之一卤化物中的Cholesky分解
- 卤化物:将C 功能传递到卤化物弹性中
- 卤化物中的可变域还原
- 卤化物检查是否可以分开
- 如何使用卤化物轮廓仪
- 卤化物表达式:_pFirstBlock == pHead 在简单程序上崩溃
- 将卤化物与表示为浮点数组的 HDR 图像一起使用
- 更改卤化物输出缓冲器布局
- 卤化物 - 而回路等效