我正在尝试使用Halide进行模板计算,这是C++代码的一部分。我使用指向在C++中定义的数据结构的缓冲区。我想对代码的执行计时,所以我尝试使用AOT编译,这样我就可以只计时执行,而不是编译时间。那么,在使用AOT编译时,有没有办法在为输入声明类型为参数的向量时使用缓冲区呢?如果没有,有没有其他方法可以在使用Halide时只计算执行的时间?
发布于 2016-10-17 07:26:56
您可以在AOT编译代码中使用缓冲区。如果将它们放入参数向量中,它们将成为所生成函数的参数。如果省略它们,那么它们将作为常量数组嵌入到生成的对象文件中。以下是关于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-17 07:43:42
可以在管道上调用"compile_jit“方法以进行编译。然后可以通过“实现”或“评估”方法调用相同的Func并计时。这将执行时间从编译时间中分离出来,同时仍然使用JIT。如果您无论如何都要在应用程序中使用AOT,那么AOT可能是更好的选择,但是如果使用compile_jit进行测试或简单的基准测试,则AOT技术非常有用。
(将主机/ GPU缓冲区传输从定时循环中分离出来,同时还确保GPU执行相对于定时循环不是异步的,还有一些其他问题。覆盖这一点比较复杂,我不认为它在这里相关。)
https://stackoverflow.com/questions/40076498
复制相似问题