1

我正在尝试使用 Halide 进行模板计算,它是 C++ 代码的一部分。我使用指向我在 C++ 中定义的数据结构的缓冲区。我想计时我的代码的执行,所以我尝试使用 AOT 编译,以便我可以只计时执行而不是编译时间。那么在使用 AOT 编译时为输入声明类型为 Argument 的向量时,有什么方法可以使用 Buffers 吗?如果没有,是否有其他方法可以在使用 Halide 时确定执行时间?

4

2 回答 2

1

您可以在 AOT 编译代码中使用缓冲区。如果将它们放在 Argument 向量中,它们将成为生成函数的参数。如果您将它们排除在外,那么它们将作为常量数组嵌入到生成的目标文件中。下面是关于 AOT 编译的教程:

http://halide-lang.org/tutorials/tutorial_lesson_10_aot_compilation_generate.html http://halide-lang.org/tutorials/tutorial_lesson_10_aot_compilation_run.html

于 2016-10-16T23:26:56.123 回答
0

可以在管道上调用“compile_jit”方法来进行编译。然后可以通过“实现”或“评估”方法调用相同的 Func 并进行计时。这将执行时间与编译时间分开,同时仍然使用 JIT。如果您无论如何要在应用程序中使用 AOT,它可能更可取,但是如果使用 JIT 进行测试或简单的基准测试,compile_jit 技术很有用。

(从时序循环中分离主机/GPU缓冲区传输还有一些其他问题,同时还要确保GPU执行相对于时序循环不是异步的。涵盖这个有点复杂,我认为它不相关这里。)

于 2016-10-16T23:43:42.493 回答