HalideRuntime.h 旨在记录客户端可以调用或替换的所有例程。运行时中还有许多其他符号,但应将它们视为内部符号。我们最近将这些其他例程移到了它们自己的命名空间中,以表明它们是内部的。
设备后端的运行时仍在进行中,并且将进行改进的设计,旨在提供更大的灵活性并允许代码做更多的事情,同时仍然可以跨多个后端进行通用工作。目前,halide_dev_malloc 将在 Halide 编译时为通过 Target 选择的任何设备后端分配设备句柄。但是,此句柄是特定于后端的,因此要对它进行任何操作,您必须知道使用哪个后端以及该后端如何与设备 API 交互。例如,为了使用 memcpy 的句柄,您需要知道设备后端支持某种统一的内存架构(“统一虚拟地址空间” 在 CUDA 术语中)并且设备内存是通过正确的 API 调用分配的,以创建一个内存缓冲区,可以使用相同的指针等从设备和 CPU 访问。取决于您使用的后端以及您所在的平台,目前可能会也可能不会。(统一内存设计在很大程度上是一个相当新的事物。我们没有投入太多精力来支持它们。)
对于 CUDA/PTX,halide_dev_malloc 调用 cuMemAlloc,我认为默认情况下它可能在许多系统上的统一虚拟地址空间中,但我不确定。