问题标签 [halide]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
532 浏览

python - 卤化物与 C 布局 numpy 数组

我开始使用 Halide 并在 Python 环境中使用它。在该 Python 环境中,数据作为 Numpy 数组传递,实际上是在别处定义的 C++ 数组的别名。

但是,当我使用调用 Halide 函数时,我得到了错误:

这可以通过将 numpy 数组复制到 Fortran 布局数组来“解决”:

使用 img 和 res 我的输入和输出图像。但是请注意,这涉及额外的复制操作,这对整体全局内存访问非常不利。

我该如何规避这个问题?我一直在考虑的一种方法是实际上告诉 Python 我的数组具有 Fortran 布局并正确切换了索引....但是,我目前使用 PyArray_SimpleNewFromData 来获取 Python 数组(实际上没有复制数据),这会导致C 风格的数组。

0 投票
2 回答
535 浏览

c++11 - 在 Halide 中使用元组

我想在卤化物中提取一个通道,

只能将单元素实现转换为缓冲区或图像

一定很简单

0 投票
1 回答
629 浏览

c++ - 卤化物:投射 RGB 图像和并行化模糊

以下代码改编自卤化物教程。

我有三个问题:

  1. 铸造 铸造是将cast<uint16_t>(clamped(x, y, c))每个 (x,y) 位置的 8 位 RG 和 B 值转换为 16 位整数,即铸造返回的是可以索引的 RGB 图像,例如 img1Fun(x, y, 0) 以访问其 R 值? 或者这是否将图像中的每个 RGB 像素投射到每个 (x,y) 位置的 RGB 像素的 [0..1] 之间的亮度值,即r*0.3 + g*0.59 + b*0.11

  2. 重载 RGB 模糊(x,y,c)是对所有索引重载的算术运算吗?例如

这是一个重载:

  1. 并行化我怎么能并行化blurX?基于此处brighten.cppCVPR'15 的示例,我可以使用在 X 方向上逐行矢量化,在 Y 方向上跨线程并行化.. 像这样?blur_x.vectorize(x, 4).parallel(y);
0 投票
1 回答
393 浏览

c++ - 如何编写具有指定为 GeneratorParam 类型的 ImageParam 的生成器?

我想为各种图像数据类型实现图像管道。我正在定义一个Generator类,其中包含build()描述管道的方法、一个GeneratorParam<type>指定数据类型参数和一个ImageParam指定输入图像的成员。如果我指定的类型是ImageParamGeneratorParam<Type>上面定义的,那么无论我在执行生成器时指定什么类型,输入图像的类型始终是默认类型。如果我复制方法ImageParam主体内部的声明build(),那么它似乎工作正常。这是使用可以具有不同类型的输入图像定义管道的正确方法吗?

这是我最初编写的课程:

如果我编译生成器并运行它以生成datatype与默认不同的管道:

然后一切看起来都很好,但是管道在运行时崩溃,因为我传递给它的缓冲区是 uint8,但它需要一个浮点类型的图像(我在生成器类中指定的默认值):

我通过复制块ImageParam内部的声明解决了这个问题build(),但这对我来说似乎有点脏。有没有更好的办法?这是现在的课程:

谢谢。

0 投票
0 回答
370 浏览

c++ - Halide:调度多级管道而不内联

我正在尝试编写一个模块化的多阶段处理管道,但我在调度它时遇到了麻烦。

代码结构如下:

现在的问题是compute_root 语句。我得到错误:

当我删除 compute_root 部分时,生产者函数是内联的,我看不到任何问题。

我尝试在 schedule 函数中添加 .bound 约束,但这没有帮助。有人可以帮我弄清楚这个错误是什么意思吗?

0 投票
2 回答
1179 浏览

c++ - 将卤化物与表示为浮点数组的 HDR 图像一起使用

这是我在这里的第一篇文章,如果我做错了什么,很抱歉:)。我会尽力做到最好。

我目前正在开发我的 HDR 图像处理程序,我将使用 Halide 实现一些基于 TMO。问题是我所有的图像都表示为浮点数组(顺序如下: b1,g1,r1,a1, b2,g2,r2,a2, ... )。使用 Halide 处理图像需要 Halide::Image 类。问题是我不知道如何在那里传递这些数据。

任何人都可以提供帮助,或者有同样的问题并知道答案吗?

编辑:

终于明白了!我需要在生成器中设置输入和输出缓冲区的步幅。谢谢大家的帮助:-)

编辑:

我尝试了两种不同的方法:

或者:

我正在考虑编辑 Halide.h 文件并将 uint8_t * 主机更改为 float_t * 主机,但我认为这不是个好主意。

编辑:

我尝试将下面的代码与我的浮动图像(RGBA)一起使用:

AOT函数生成:

正确的代码调用:

不幸的是,我遇到了味精崩溃:

我认为这行有问题:output_buf.stride[0] = buf.stride[0] = 4,但我不确定我应该改变什么。有小费吗?

0 投票
1 回答
338 浏览

c++ - 卤化物表达式:_pFirstBlock == pHead 在简单程序上崩溃

我尝试使用卤化物创建简单的程序。使用第一个教程复制粘贴几行代码。然后遇到了一些问题

线;

错误:调试断言失败!

程序:D:\SVN\Inzynierka\Source\HDRView\x64\Debug\test.exe 文件:f:\dd\vctools\crt\crtw32\misc\dbgheap.c 行:1424

表达式:_pFirstBlock == pHead

调用堆栈:

编辑:

我找到了解决我的问题的方法。Visual Studio 2015 是有罪的。将项目属性中的平台工具集更改为 Visual Studio 2013 后,一切正常...谢谢大家的帮助。

0 投票
2 回答
708 浏览

c++ - 如何使用卤化物探查器

几个星期以来,我一直在探索 Halide 的可能性,为了更好地了解 Halide 正在做什么,我想尝试使用 halide profiler。假设我有一个 Func 测试。(为了便于阅读,我省略了变量声明等。) f=Func(test); f(x,y)=some_image(x,y)*2; 如果我想运行它,我调用f.realize(some_image.width(),some_image.height()). 现在,如果我理解正确,当想要对此进行分析时,我需要使用 halide_profiler_func_stats 类。但是我找不到任何方法来访问这个和/或其他方式来获取分析数据。

到目前为止,我一直在我的软件中运行一个单独的计时器,但我想从 Halide 本身查看分析器的功能。我该怎么做呢?

0 投票
1 回答
294 浏览

halide - 编程动态框模糊

我尝试创建一个函数来生成框模糊的表达式,其矩阵的大小可以是 3,5 或 7,虽然程序确实调用了该函数,但它总是返回一个静态数字,我将其作为 Expr 对象的定义。所以基本上它就像它不做for循环一样。任何提示将不胜感激,因为我对卤化物和一般图像处理非常陌生。

创建 Expr 的函数:

模糊功能:

此外,我确实有一些用于测试的打印件,calculateBlur 函数中的文本只出现一次。我还使用了 trace_stores(),它确认所有输出值都设置为 0.0f。

更新:我替换了 calculateBlur 中的行

现在我收到以下错误:“无法构造对具有 3 维的图像“i0”的 1 参数引用。”

更新2:

进一步修改calculateBlur中的行后

我收到以下错误:“输入缓冲区 i0 在 -2 处访问,它在维度 0 中的 min(0) 之前”,我不明白为什么会出现,因为我确实重新定义了边框和角的函数

更新3:

我意识到错误不断弹出,因为如果我实现从 0,0 开始的函数,我创建的函数将引发异常。所以现在我的问题是:我可以在图片周围做一个边框,这样结果就可以保留它的尺寸,而程序不会抛出异常?结果似乎一点也不模糊。

0 投票
1 回答
165 浏览

c++ - 卤化物检查是否可以拆分

我正在编写一个采用不同图像尺寸的卤化物程序。当我优化时,我将一个循环拆分为多个“子循环”,这样我就可以将它与给定的因子并行化。然而,对于小图像,如果图像小于分割因子,这可能是一个问题。或者,更准确地说,当循环中的迭代次数小于拆分因子时。

使用 来处理越界读取Halide::BoundaryConditions,当然我可以使用 if 语句手动检查拆分因子,但是 Halide 是否有类似于优化的 BoundaryConditions 的东西?