- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我在这里的第一篇文章,如果我做错了什么,我深表歉意:)。我会努力做到最好。
我目前正在研究我的 HDR 图像处理程序,我不会使用 Halide 实现一些基础 TMO。问题是我所有的图像都表示为 float 组(顺序如下:b1,g1,r1,a1,b2,g2,r2,a2, ...)。使用 Halide 处理图像需要 Halide::Image 类。问题是我不知道如何将这些数据传递到那里。
任何人都可以提供帮助,或者有同样的问题并且知道答案吗?
编辑:
终于明白了!我需要在生成器中设置输入和输出缓冲区的步幅。感谢大家的帮助:-)
编辑:
我尝试了两种不同的方式:
int halideOperations( float data[] , int size, int width,int heighy )
{
buffer_t input_buf = { 0 };
input_buf.host = &data[0];
}
或者:
int halideOperations( float data[] , int size, int width,int heighy )
{
Halide::Image(Halide::Type::Float, x, y, 0, 0, data);
}
我正在考虑编辑 Halide.h 文件并将 uint8_t * host 更改为 float_t * host,但我认为这不是个好主意。
编辑:
我尝试将下面的代码与我的 float 图像 (RGBA) 结合使用:
AOT函数生成:
int main(int arg, char ** argv)
{
Halide::ImageParam img(Halide::type_of<float>(), 3);
Halide::Func f;
Halide::Var x, y, c;
f(x, y, c) = Halide::pow(img(x,y,c), 2.f);
std::vector<Halide::Argument> arguments = { img };
f.compile_to_file("function", arguments);
return 0;
}
正确的代码调用:
int halideOperations(float data[], int size, int width, int height)
{
buffer_t output_buf = { 0 };
buffer_t buf = { 0 };
buf.host = (uint8_t *)data;
float * output = new float[width * height * 4];
output_buf.host = (uint8_t*)(output);
output_buf.extent[0] = buf.extent[0] = width;
output_buf.extent[1] = buf.extent[1] = height;
output_buf.extent[2] = buf.extent[2] = 4;
output_buf.stride[0] = buf.stride[0] = 4;
output_buf.stride[1] = buf.stride[1] = width * 4;
output_buf.elem_size = buf.elem_size = sizeof(float);
function(&buf, &output_buf);
delete output;
return 1;
}
不幸的是,我遇到了 msg:
Error: Constraint violated: f0.stride.0 (4) == 1 (1)
我认为这一行有问题:output_buf.stride[0] = buf.stride[0] = 4,但我不确定应该更改什么。有什么建议吗?
最佳答案
如果直接使用 buffer_t,则必须将分配给 host 的指针转换为 uint8_t * :
buf.host = (uint8_t *)&data[0]; // Often, can be just "(uint8_t *)data"
如果您正在使用提前 (AOT) 编译并且数据未作为直接调用 Halide 的代码的一部分进行分配,这就是您想要执行的操作。 (下面讨论的其他方法控制存储分配,因此它们不能接受传递给它们的指针。)
如果您使用的是 Halide::Image 或 Halide::Tools::Image,则类型转换将在内部处理。上面用于 Halide::Image 的构造函数不存在,因为 Halide::Image 是一个模板类,其中基础数据类型是模板参数:
Halide::Image<float> image_storage(width, height, channels);
请注意,这将以平面布局存储数据。 Halide::Tools::Image 类似,但可以选择进行交错布局。 (就个人而言,我尽量不在小型测试程序之外使用这些中的任何一个。有一个长期计划使所有这些合理化,这将在合并任意维度 buffer_t 分支后继续进行。另请注意 Halide::Image 需要 libHalide.a在 Halide::Tools::Image 不存在并且仅通过包含 common/halide_image.h 是头文件的地方进行链接。)
还有 Halide::Buffer 类,它是 buffer_t 的包装器,在即时 (JIT) 编译中很有用。它可以引用存储中传递的内容并且没有模板化。但是我的猜测是您想直接使用 buffer_t 并且只需要类型转换来分配主机。还要确保将 buffer_t 的 elem_size 字段设置为“sizeof(float)”。
对于交错的 float 缓冲区,你最终会得到类似这样的东西:
buffer_t buf = {0};
buf.host = (uint8_t *)float_data; // Might also need const_cast
// If the buffer doesn't start at (0, 0), then assign mins
buf.extent[0] = width; // In elements, not bytes
buf.extent[1] = height; // In elements, not bytes
buf.extent[2] = 3; // Assuming RGB
// No need to assign additional extents as they were init'ed to zero above
buf.stride[0] = 3; // RGB interleaved
buf.stride[1] = width * 3; // Assuming no line padding
buf.stride[2] = 1; // Channel interleaved
buf.elem_size = sizeof(float);
您还需要注意 Halide 代码本身的边界。可能最好查看 tutorial/lesson_16_rgb_generate.cpp 中的 set_stride 和 bound 调用以获取相关信息。
关于c++ - 将 Halide 与表示为 float 组的 HDR 图像一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822003/
Byte byte1=10; Short short1=20; Integer integer=30; 在上面的代码中自动装箱成功在这里查看下面的代码,我正在明确地进行 casitng,因为它默认将
这里有几个相关的问题。 根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗? Java 将所有整型文字视为 int -
我最近一直在使用一些 bash 脚本,并且一直在浏览手册页。根据我收集到的信息,$(( )) 是否表示 expr 而 [ ] 是否表示 test? 对于 $(( )): echo $(( 5 + 3
我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现? 最佳答案 这个怎么样? int myNum =
我正在自学 verilog 并尝试编写失败模型。我在指定部分遇到了以下 ck->q 延迟弧的建模,但无法理解它到底是做什么的。 (posege CK => (Q : 1'b1))=(0, 0); 谁能
考虑这样一个句子: John Smith travelled to Washington. 在美好的一天,名称标记者会将“约翰·史密斯”识别为一个人,将“华盛顿”识别为一个地方。然而,如果没有其他证据
有没有办法通过某种元处理器或预处理器告诉 JavaScript 单词 AND 等于 && 而单词 OR 等于 ||和 <> 等同于 !===? 也许将 THEN 等同于 { 结束到 不要! 最佳答案
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度为 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个 vector ,如下所示 // V could be 100 m
我想使用 Python 表示一组整数范围,其中可以动态修改该集合并测试其是否包含在内。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义我关心的地址范围: 200 - 400 450 -
>>> x = -4 >>> print("{} {:b}".format(x, x)) -4 -100 >>> mask = 0xFFFFFFFF >>> print("{} {:b}".forma
虽然代码不多,但简单明了 复制代码 代码如下: preg_match('/^(?!string)/', 'aa') === true 这个用来验证一个字符串是否是非'string'开头的,
我正在尝试创建一些 SQLAlchemy 模型,并且正在努力解决如何将 timedelta 正确应用于特定列的问题。 timedelta(以天为单位指定)作为整数存储在单独的表 (Shifts) 中,
“Range: bytes=0-” header 是什么意思?是整个文件吗?我尝试发回 0 个字节但没有成功,当我发送整个文件时它可以正常工作,但我在流式上下文中不止一次收到此请求,它看起来不正确。
要创建时间序列的 SAX 表示,您首先需要计算数据的 PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算 PAA 之前,您需要对数据进行标准化。 我正在对数据进行标准化,但我不知道之后如何计
假设我有一个 RESTful、超文本驱动的服务来模拟冰淇淋店。为了帮助更好地管理我的商店,我希望能够显示每日报告,列出所售每种冰淇淋的数量和美元值(value)。 这种报告功能似乎可以作为名为 Dai
我需要以 RDF 格式表示句子。 换句话说,“约翰喜欢可乐”将自动表示为: Subject : John Predicate : Likes Object : Coke 有谁知道我应该从哪里开始?是否
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。 文本文件包含 MT-940 数据 - SWIFT 银行对帐单。 这些行由一个指定类
我主要是一名 C++ 开发人员,但我经常编写 Python 脚本。我目前正在为游戏编写骰子模拟器,但我不确定在 Python 中解决我的问题的最佳方法。 一共有三种玩家技能,每个玩家一强、中一、弱一。
在过去的 5 个小时里,我一直在寻找答案。尽管我找到了很多答案,但它们并没有以任何方式提供帮助。 我基本上要寻找的是任何 32 位无符号整数的按位异或运算符的数学、算术唯一表示。 尽管这听起来很简单,
我需要将依赖项存储在 DAG 中。 (我们正在细粒度地规划新的学校类(class)) 我们正在使用 rails 3 注意事项 宽于深 很大 我估计每个节点有 5-10 个链接。随着系统的增长,这将增加
我是一名优秀的程序员,十分优秀!