gpt4 book ai didi

python - 在 PyCUDA 中调用 __host__ 函数

转载 作者:行者123 更新时间:2023-12-01 02:49:19 24 4
gpt4 key购买 nike

是否可以像 __global__ 函数一样在 pyCUDA 中调用 __host__ 函数?我在文档中注意到 pycuda.driver.Function 创建了 __global__ 函数的句柄。 __device__ 函数可以从 __global__ 函数调用,但 __host__ 代码不能。我知道使用 __host__ 函数几乎违背了 pyCUDA 的目的,但是我想导入和调用一些已经创建的函数作为证明概念。

请注意,每当我尝试导入 __host__ 函数时,我都会得到:

pycuda._driver.LogicError: cuModuleGetFunction failed: named symbol not found

最佳答案

不,这是不可能的。

这不是 PyCUDA 本身的限制,而是 CUDA 本身的限制。 __host__ 装饰器只是退化为普通的主机代码,并且 CUDA API 不会也无法以与设备代码相同的方式处理它们(请注意,API 也不处理 __device__ 两者之一,这是 __host__ 的真正等价物。

如果您想从 Python 调用/使用 __host__ 函数,您将需要使用标准 C++/Python 互操作机制之一,例如 ctypes 或 SWIG 或 boost python 等。

<小时/>

编辑:

自从五年前写下这个答案以来,CUDA 通过 cuLaunchHostFunc 添加了在 CUDA 流中运行主机函数的功能(驱动程序 API)或 cudaLaunchHostFunc 。不幸的是,在本次编辑时(2022 年 6 月),PyCUDA 还没有expose此功能,因此在 PyCUDA 中仍然不可能,并且原始答案的核心消息没有改变。

关于python - 在 PyCUDA 中调用 __host__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44955432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com