问题标签 [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 投票
1 回答
130 浏览

halide - 如何使用边距初始化外部图像以进行卷积?

约束: 1. 有一个指向具有大小边距的图像的指针 (ImHeight,ImWidth) 2. 过滤器大小 (FH,FW) ;FH,FW 为奇数 3. ActualImageHeight = ImHeight-2*(FH/2); ActualImageWidth = ImWidth-2*(FW/2);

如何:

  1. 用指针初始化图像,使图像(0,0)是像素(0,0)而不是边缘像素?
  2. 在不使用边界条件/钳位的情况下定义时间表 - 因为给定的图像指针内存已经占了边距
0 投票
2 回答
1334 浏览

c++ - 使用最佳编译器标志和配置从 cmake 运行 Halide 生成器

好的,所以:我已经成功地将第一个工作的卤化物生成器集成到我的小图像处理项目cmake 构建系统中。

生成器基于 Halide 代码库中的示例代码实现了图像大小调整和重采样算法Halide/apps/resize/resize.cpp——我调整了示例以利用生成器参数,并使用定义的函数将生成器的编译和调用绑定到我的 cmake 脚本in HalideGenerator.cmake,就像 Halide 项目在它自己的构建脚本中所做的那样。

到目前为止,这一切都很好——但我在代码生成细微差别领域缺乏专业知识。例如,我调整了调度方法以在我的笔记本电脑上获得最佳观察到的经验速度——但是尽管在 Halide 的许多与生成器相关的工具脚本的深处进行了许多长时间的修补和代码阅读,但我只有最肤浅的了解代码生成过程。

具体来说,我不知道如何处理这个问题。最好使用默认值还是尝试为我的目标平台打开特定选项——如果是后者,我是否必须在某个地方有条件代码,或者二进制文件可以包含后备?

这就是我所说的:在 Halide 教程第 15 课的源代码中,有一个复杂的脚本可以调用具有各种选项的生成器。这是此脚本中代码注释的片段:

……因此很难将必须做的事情与应该做的事情或可以做的事情分开,酌情决定。相比之下,在设置 C++ 或 Objective-C 项目(甚至更多拜占庭示例)时不必处理这些问题,因为编译器和链接器会为您做出大部分决定,最多需要一两个标志。

我的问题是:如何将 Halide 生成器的输出库二进制文件集成到我现有的项目中 - 使生成器输出尽可能快(例如使用 GPU、SSE2/3、AVX2 等)而不进一步限制可移植性(例如它不会' t在稍微不同的机器上神秘地出现段错误)?

具体来说,我的流程应该是什么——例如,我是否应该首先只针对最低公分母,然后逐步利用更多奇特的处理器功能?


编辑:正如我在下面的评论中提到的,这是我的 GenGen 二进制stdout在没有选项调用时输出的内容:

伊姆古尔

0 投票
1 回答
84 浏览

c++ - 创建固定尺寸的卤化物管道

我的文件是提前编译好的。我从图像中计算出小区域。在这些我想用重叠来规范化。因此 ia Func 就是用归约域计算因子。之后我尝试计算重叠的归一化区域。结果因此具有更大的尺寸。只要我意识到 Func 是它工作的小区域,当我尝试编译到 b 时,它就不再工作了,因为结果必须具有另一个维度作为 c 所需的维度。有没有办法根据输入或输出缓冲区尺寸设置 Func 的尺寸?或者您知道任何其他解决方法吗?

0 投票
1 回答
792 浏览

c++ - Halide Jit 编译

我试图将我的卤化物程序编译为 jit,以便稍后在不同图像上的代码中使用它几次。但我认为我做错了什么,有人可以纠正我吗?首先,我创建要运行的卤化物函数:

将其存储在指针中:

然后我尝试运行它:

但它不起作用......错误:

编辑:

这是我的运行功能代码:

有人可以帮我吗?

编辑:

感谢@KhouriGiordano,我发现我做错了什么。事实上,我从 AOT 编译切换到了这段代码。所以现在我的代码看起来像这样:

我像这样使用它:

但它仍然在 m_gamma.realize 函数上崩溃,控制台中有信息:

0 投票
1 回答
247 浏览

halide - 显示模板匹配结果

我在 Halide 中进行模板匹配时遇到了另一个问题(已解决问题的原始链接:输出在模板匹配中移动

现在我试图在得分最低的位置绘制一个矩形(表示最佳匹配)。

模板匹配部分:

现在我很清楚,我应该用来查找最低分数位置的函数是 argmin,但我不太明白它是如何使用的。另外我知道绘图方法将涵盖像素下方和右侧的所有内容,但我还没有到达那部分。

绘制矩形部分:

先感谢您。

0 投票
2 回答
388 浏览

c++ - 卤化物的性能计数器?

是否有可用于使用 Halide 语言编写的代码的性能计数器?我想知道我的代码执行了多少加载、存储和 ALU 操作。

用于调度多阶段管道的 Halide 教程通过比较分配的内存量、加载、存储和对 halide Funcs 的调用来比较不同的调度,但我看不到这些信息是如何收集的。我想每次发生这些操作之一时,都可以使用 trace_stores、trace_loads 和 trace_realizations 打印到控制台。虽然这不是一个很好的选择,因为它会大大减慢程序的执行速度,并且需要某种计数脚本来将控制台输出的长列表编译为加载、存储和 ALU 操作所需的计数。

0 投票
1 回答
233 浏览

halide - Halide HelloAndroid 导入方法未找到

我尝试在 Android Studio 中导入 HelloAndroid 项目,但是,当我尝试构建 apk 并在设备上运行它时,我收到一个 gradle 错误:

在此处输入图像描述

有谁知道如何解决这个问题并运行应用程序?

0 投票
1 回答
375 浏览

halide - 在函数内运行多个 AOT 函数

我正在尝试以 AOT 形式实现我的模板匹配(带绘图),当我通过包含从另一个项目编译的单独静态库来测试不同的方法是否有效时,我得到了如下构建错误:

严重性代码 描述 项目文件行抑制状态错误 LNK2005 _ZN6Halide7Runtime8Internal13custom_mallocE 已在 template_matching_ccorr.lib(template_matching_ccorr.lib.obj) 卤化物模板匹配 v2 AOT 中定义 运行 c:\Users\Admin\documents\visual studio 2015\Projects\Halide Template Matchign v2 AOT Run\Halide Template Matchign v2 AOT Run\template_matching_sqdiff.lib(template_matching_sqdiff.lib.obj) 1

有没有办法能够包含多个库并能够运行不同的功能?

还有一个类似的函数可以在 AOT 编译代码中使用,或者需要我创建两个不同的 AOT 函数(假设我可以调用多个函数开始)

编辑:快速修复似乎是将 /FORCE:MULTIPLE 添加到链接器的命令行

EDIT2:设法让它通过添加来编译

除了解决多个定义的管道之外的大多数管道。现在我想知道为什么我必须在运行时使用一个管道,即使我可以只包含 HalideRuntime.h 但它并没有真正起作用。

0 投票
1 回答
50 浏览

halide - 不能在我的项目中包含独立运行时

我生成了独立的运行时,我可以将它与几个不包含运行时的已编译 AOT 函数一起使用,但是当我尝试将它包含在链接器中时它不起作用,因为文件本身是文件类型。

我使用编译运行时

我使用的计算机具有 64 位的 Windows 7。

这是一个错误还是我编译运行时错误?

0 投票
0 回答
199 浏览

halide - CL:clEnqueueNDRangeKernel 失败:CL_INVALID_WORK_GROUP_SIZE

出于测试目的,我安排了一个函数 f,它调用函数 g,作为 gpu_single_thread。根据我安排 g 的方式,对于不同的图像大小,我会收到上述运行时错误。如果我不安排 g 它以 96x96 的大小失败如果我这样安排它: g.compute_at(f,Var::gpu_blocks()).gpu_threads(x,y); 它以 64x64 的大小失败。如果除了 .gpu_threads 之外我做同样的事情,它会在 96x96 处再次失败。

对于 32x32 图像,选项运行无错误。除了由 Pipeline.cpp 中的 report_if_error 函数触发之外,有没有办法获得有关错误的更多信息?