【问题标题】:OpenCL: How to find out maximum size of Image3D that fits on GPUOpenCL:如何找出适合 GPU 的 Image3D 的最大尺寸
【发布时间】:2016-05-04 20:33:14
【问题描述】:

使用 OpenCL 时,可以通过调用来检查设备上 image3D 的最大理论尺寸

CL_DEVICE_IMAGE3D_MAX_WIDTH
CL_DEVICE_IMAGE3D_MAX_DEPTH
CL_DEVICE_IMAGE3D_MAX_HEIGHT

但例如,我的 GPU 没有提供足够的内存来分配该大小的 3D RGBA 图像。所以很明显,当我尝试推送这样的图像时,会发生 OutOfResources 错误。

我的问题:给定一个包含尺寸为<2048 的图像的vector<float>,我如何检查它是否适合我的GPU?

我的问题的背景是,我想以其他方式拆分图像以便对它进行部分处理。

【问题讨论】:

  • 也应该是CL_DEVICE_IMAGE3D_MAX_WIDTH,是不是错字? 2D 可能会提供更大的尺寸。如果您在每个大小范围内,并且设备有足够的内存,它应该可以工作。
  • @DarkZeros 更正了错字。

标签: c++ opencl


【解决方案1】:

您可以使用CL_DEVICE_MAX_MEM_ALLOC_SIZE 返回内存对象分配的最大大小(以字节为单位)。

虽然这没有考虑到当前使用的内存,但您可以尝试通过跟踪您正在执行的分配并检查 CL_DEVICE_GLOBAL_MEM_SIZE 来自己做。

【讨论】:

  • 如果我有一个大小为CL_DEVICE_MAX_MEM_ALLOC_SIZE 的图像,它不一定适合GPU,对吧?因为即使我的内核只将此图像作为参数,也需要更多内存用于局部变量等?
  • 没错,每个设备的情况可能完全不同。你真的需要尝试各种大小分配,看看有什么效果。
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2011-03-10
  • 2014-04-26
  • 1970-01-01
相关资源
最近更新 更多