halide - 卤化物数学是否以“浮点”(32 位)执行?
问题描述
我正在编写 Halide 代码,并且我已将 Buffer<double> 输入声明为我的 Halide 函数的输入。但是,我不确定这是否有意义,因为 Halide tutorial#1 说
// Halide does type inference for you. Var objects represent
// 32-bit integers, so the Expr object 'x + y' also represents a
// 32-bit integer, and so 'gradient' defines a 32-bit image, and
// so we got a 32-bit signed integer image out when we call
// 'realize'. Halide types and type-casting rules are equivalent
// to C.
我可以毫无问题地运行该函数,但我不确定是否在我不知道的情况下进行了一些类型转换以将我的 double 转换为 float。
解决方案
好问题!(我们需要更多更好的文档。)
使用 s 是完全合理double
的。很像在 C 中(在您引用的评论中提到的那些 C 风格的类型提升规则),double <op> float
或者double <op> int
将执行计算并将结果返回为double
.
例如,如果你有你的Buffer<double> input
,那么:
Func f; Var x, y;
f(x,y) = input(x,y)*2;
推断类型类型为f
as double
,以及。如果您检查作为结果输出的缓冲区的类型,您会注意到这一点。与在 C 中一样,int
常数2
将double
在乘法之前提升,结果将存储为double
. each 的类型只是由首先定义它Func
的右手边的推断类型给出。Expr
类型会自动升级,从不降级。如果要限制结果的类型,可以cast
在表达式中使用显式 s。
那有意义吗?
推荐阅读
- sql - 调用任何存储过程时预执行查询
- python - 如何在创建多个新列的 pandas.core.groupby.GroupBy 函数上运行单个聚合函数
- sql - VBA访问中的while循环
- c++ - 将数据返回自动到新的双精度
- excel - 从属下拉框(表单控件) Excel
- angular - 如何使用 Angular 2+ 在本地下载 PDF?
- azure-cosmosdb - 我们应该称之为 DocumentDb 还是 CosmosDB SQL Api
- angular - 更改 ng-multiselect-dropdown 的 css
- matlab - MATLAB 索引后从 double 到 int32 的不需要的转换
- c# - 使用确切的 XPATH(n) 将 XML 属性转换为字符串/列表