卤化外部方法
Halide extern methods
我使用AOT编译来使用没有卤化物库的卤化物代码。
我在halidertime .h(可从源代码获得)中看到,我的.o文件中有许多外部方法可用。
halide_dev_malloc和halide_dev_free非常有趣。我已经使用halide_copy_to_dev没有问题,但是我看到我的内存被分配了。如果我想在主机和设备之间做一个简单的内存占用,而使用halde_dev_malloc,这是可能的吗?
是否halidertime .h组所有可用的外部函数或目标文件包含很多其他?
周杰伦halidertime .h旨在记录所有可被客户端调用或替换的例程。运行时中还有许多其他符号,但它们应该被视为内部符号。我们最近将这些例程移到它们自己的命名空间中,以表明它们是内部的。
设备后端的运行时仍在进行中,将有一个改进的设计,旨在允许更大的灵活性,并允许代码在多个后端通用工作的同时做更多的事情。目前,halde_dev_malloc将在Halide编译时通过Target为所选择的设备后端分配设备句柄。然而,这个句柄是特定于后端,因此为了使用它做任何事情,您必须知道使用的是哪个后端以及该后端如何与设备API交互。例如,为了使用memcpy的句柄,你需要知道设备后端支持某种统一的内存架构(CUDA术语中的"统一虚拟地址空间"),并且设备内存被分配了正确的API调用,以创建一个内存缓冲区,可以从设备和CPU使用相同的指针访问,等等。这取决于您使用的后端和平台,目前可能会也可能不会成功。(统一内存设计在很大程度上是最近才出现的。我们没有花很多精力去支持他们。
对于CUDA/PTX, halidde_dev_malloc调用cuMemAlloc,我认为它可能在默认情况下在许多系统的统一虚拟地址空间中,但我不确定。
是的,您可以使用halde_dev_malloc并手动复制内容。请参阅https://github.com/halide/Halide/blob/master/src/runtime/cuda.cpp第466行,了解halde_copy_to_dev的实际功能。
首先执行一个halde_dev_malloc,然后使用cuda的cuMemcpyHtoD。这里有一堆额外的逻辑,以防缓冲区在内存中不密集,但大多数情况下,它会变成一个单一的cuMemcpyHtoD。
我相信halidertime .h包含所有有用的外部函数。还有一些其他的内部变量,比如halde_create_cuda_context,可能会很有趣。要查看所有这些函数,请在此文件夹中查找以名称halde_开头的标记为WEAK的函数:https://github.com/halide/Halide/tree/master/src/runtime
或者您可以在卤化物生成的对象文件上运行nm,并查看所有以halde_开头的符号。
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 仅在少数方法(静态或共享库)中解析的外部符号
- Windows C++静态库在初始化期间无法访问外部方法
- 从类C++外部调用指向成员方法的成员指针
- const_cast const 方法中的"this"将"this"分配给外部变量?
- C 将方法和字段带入外部范围,而无需明确的参考
- 将类方法设置为外部定义的函数
- const 类方法是否阻止在类外部分配变量?
- 我可以在外部组装(function.asm)中制作C 方法吗?
- Qt的GUI线程在从外部对象调用方法时是否会在引擎盖下生成线程?
- 是否有一种方法可以让公共成员在班级外部无法解码,而无需访问包装器功能
- 电子内部或外部方法创建自己的右键单击上下文菜单 - Windows
- 直接调用外部方法时的访问违规异常
- 有没有一种很好的跨平台方法可以使用CMake包含外部C++库
- 如何在类外部声明专业模板方法
- 从外部 VM 复制特定数据的最佳方法是什么?
- 模板化方法中使用的嵌套类的未解析外部符号
- 如何在WebBrowser控件窗口中生成异常.MFC中实现的外部方法
- QTGraphicsView从主方法运行到外部后立即关闭
- Qt中的非类方法(带有qtcreator)未解析的外部符号