【问题标题】:CommandQueue failed: OUT_OF_HOST_MEMORY命令队列失败:OUT_OF_HOST_MEMORY
【发布时间】:2019-10-13 06:33:21
【问题描述】:

我正在尝试使用 Radeon R9 270x garphics 卡并使用 amdgpu 19.30 驱动程序在 Ubuntu 18.04 上设置 pyopencl。

import pyopencl as cl
import numpy as np

platform = cl.get_platforms()[0]
platform_info = platform.get_info(cl.platform_info.VENDOR)
platform_version = platform.get_info(cl.platform_info.VERSION)

device = platform.get_devices()[0]
device_info = device.get_info(cl.device_info.VENDOR)
device_version = device.get_info(cl.device_info.VERSION)

context = cl.Context([device])
queue = cl.CommandQueue(context, device)

每当我尝试运行上述代码时,它都无法创建 CommandQueue 并出现以下错误

Traceback (most recent call last):
  File "example.py", line 13, in <module>
    queue = cl.CommandQueue(context, device)
pyopencl._cl.RuntimeError: CommandQueue failed: OUT_OF_HOST_MEMORY

为了安装 pyopencl,我使用了他们的 install page 中的说明,并按照 AMD here 中的说明并使用旧版 OpenCL 通过 amdgpu 驱动程序安装了 OpenCL。

我认为我安装 OpenCL 的方式没有问题,因为platform_version 给了我'OpenCL 2.1 AMD-APP (2906.7)'device_version 给了我'OpenCL 1.2 AMD-APP (2906.7)',正如预期的那样。

有人知道发生了什么吗?

【问题讨论】:

  • 我不熟悉 Python 绑定,但如果可以,我会尝试用纯 C 语言重现该问题。如果它在那里有效,则说明您的 Python 绑定或 Python 进程有些问题本身就是造成问题的原因。如果 C 版本以同样的方式失败,则可能是 OpenCL 方面有问题。

标签: python opencl pyopencl


【解决方案1】:

这些导出解决了我的 260X 的这个问题:

export GPU_FORCE_64BIT_PTR=1
export GPU_USE_SYNC_OBJECTS=1
export GPU_MAX_ALLOC_PERCENT=100
export GPU_SINGLE_ALLOC_PERCENT=100
export GPU_MAX_HEAP_SIZE=100

【讨论】:

  • 虽然这可能会解决问题,但写下你的想法和你如何得出答案,以及解释代码的作用,总是对提问者有所帮助。见How do I write a good answer?
  • 不幸的是,我在没有进一步解释的论坛上找到了这个答案。我在这里重新发布了答案,以使其更具可见性。一种解释可能是将堆大小设置为最大值,因此为 GPU 分配了更多内存,但我不想冒着危险解释某些事情的风险。
  • @ShivamJha 我不知道这是否可行,因为我不再拥有我用来提问的设置。我不知道我是否应该将您的答案标记为已接受的答案,但我想它会留在这里供其他人查看。据我记得,让 OpenCL 工作的唯一方法是降级到 Ubuntu 到 14.xx,我认为更改 GPU 的驱动程序。
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多