【问题标题】:PyCUDA mem_get_ipc_handle gives LogicError: cuIpcGetMemHandle failed: operation not supportedPyCUDA mem_get_ipc_handle 给出 LogicError: cuIpcGetMemHandle failed: operation not supported
【发布时间】:2019-02-07 00:31:56
【问题描述】:

我正在尝试执行代码here。我收到以下错误:

orig:  [0.36975162 0.08511397 0.16306844 0.4015488  0.25104857 0.30606773 0.24524205 0.13792656]
Process Process-1:
Traceback (most recent call last):
  File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 267, in _bootstrap
    self.run()
  File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\My\Desktop\test_codes\pycuda4.py", line 28, in func1
    h = drv.mem_get_ipc_handle(x_gpu.ptr)
LogicError: cuIpcGetMemHandle failed: operation not supported

我在 Windows 7 x64 环境中使用 Python 3.7、CUDA 9.2。 Windows 不支持 CUDA IPCMemoryHandle 吗?或者,我错过了什么?

【问题讨论】:

    标签: cuda ipc pycuda


    【解决方案1】:

    here 记录的是 CUDA IPC 功能仅在 Linux 上受支持。

    但是,驱动 API(PyCUDA 所基于)docs 表示:

    IPC 功能仅限于支持 Linux 和 Windows 操作系统上的统一寻址的设备。 Windows 上的 IPC 功能仅限于 TCC 模式下的 GPU

    因此,如果您可以将 Windows GPU 放入 TCC mode(通过 nvidia-smi 工具),那么我认为它应该可以工作/得到支持。 GeForce GPU 无法进入 TCC 模式。大多数 Titan 和 Quadro GPU 都可以置于 TCC 模式。 Windows 上的大多数 Tesla GPU 应自动处于 TCC 模式。请注意,将 GPU 置于 TCC 模式意味着它无法再托管显示器。

    在最近的 CUDA 工具包中,为 Windows 中的 WDDM 和 TCC 使用添加了 IPC 支持(底层机制不同)。 CUDA IPC 示例代码演示了所有风格(linux、windows TCC、windows WDDM)。

    【讨论】:

    • 有没有其他方法可以让设备内存IPC在Windows下工作?
    • 更新了我的答案,它应该解决这个问题。除了答案中描述的内容外,没有其他方法可以在 Windows 上的进程之间共享设备内存或设备内存指针。当然,如果您愿意,您可以将数据从设备内存复制到主机内存,并使用标准 IPC 技术。大概这不是您的想法。
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2021-04-02
    • 2013-01-18
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多