c++ - Halide 外部法

标签 c++ halide

我使用 AOT 编译来使用没有 Halide 库的 Halide 代码。

我在 HalideRuntime.h(在资源中可用)中看到我的 .o 文件中有许多可用的外部方法。

halide_dev_mallochalide_dev_free 非常有趣。我已经毫无问题地使用了 halide_copy_to_dev,但我看到我的内存已分配。 如果我想在主机和设备之间做一个简单的 memcpy 并改用 halide_dev_malloc,这可能吗?

HalideRuntime.h 是否对所有可用的外部函数进行了分组,或者目标文件是否包含许多其他函数?

周杰伦

最佳答案

HalideRuntime.h 旨在记录所有可由客户端调用或替换的例程。运行时还有许多其他符号,但它们应该被视为内部符号。我们最近将这些其他例程移到了它们自己的命名空间中,以表明它们是内部的。

设备后端的运行时仍在进行中,将会有一个改进的设计,旨在提供更大的灵 active 并允许代码做更多的事情,同时仍然可以跨多个后端正常工作。目前,halide_dev_malloc 将在 Halide 编译时为通过 Target 选择的任何设备后端分配设备句柄。但是,此句柄是特定于后端的,因此为了对其执行任何操作,您必须知道使用了哪个后端以及该后端如何与设备 API 交互。例如。为了将句柄与 memcpy 一起使用,您需要知道设备后端支持某种统一的内存架构(CUDA 术语中的“统一虚拟地址空间”)并且设备内存是通过正确的 API 调用分配的,以生成内存可以使用相同的指针等从设备和 CPU 访问的缓冲区。根据您使用的后端和您所在的平台,目前可能会或可能不会工作。 (统一内存设计在很大程度上是一个相当新的事物。我们还没有付出很多努力来支持它们。)

对于 CUDA/PTX,halide_dev_malloc 调用 cuMemAlloc,我认为它可能默认位于许多系统的统一虚拟地址空间中,但我不确定。

关于c++ - Halide 外部法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455552/

相关文章:

c - Halide 与 OpenVX

halide - Halide 索引是行优先、列优先还是混合?

c++ - vector emplace_back 困惑

C++ 奇怪的表达式编译得很好

c++ - 配置文件模板生成makefile

c++ - Halide 多 GPU 支持

c++ - 如何将 char 和 char* 附加到现有字符串?

c++ - boost::scoped_lock 似乎没有锁定 std::cout

c++ - Halide:较大图像的去马赛克算法错误。似乎适用于 16x16 图像。

c++ - 在 Halide 管道中访问函数