【问题标题】:Why Global memory allocation is successful with the size more than the limit in GPU?为什么全局内存分配成功且大小超过 GPU 的限制?
【发布时间】:2019-01-21 12:55:46
【问题描述】:

我正在试验 Vivante GPU GC2000 系列,其中 clinfo 产生了以下结果。

 CL_DEVICE_GLOBAL_MEM_SIZE:             64 MByte
 CL_DEVICE_MAX_MEM_ALLOC_SIZE:          32 MByte
 CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:       Read/Write
 CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE:       64
 CL_DEVICE_GLOBAL_MEM_CACHE_SIZE:       4096
 CL_DEVICE_LOCAL_MEM_SIZE:          1 KByte
 CL_DEVICE_LOCAL_MEM_TYPE:          Global
 CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:        4 KByte
 CL_DEVICE_MAX_CONSTANT_ARGS:           9

从上面的输出可以看出,64MByte 是全局内存分配的限制。

现在,当我尝试分配 900Mbytes 全局大小时,我没有收到任何错误并且它是成功的。

int noOfBytes = (900 * 1024 * 1024);
memPtr = clCreateBuffer(context, CL_MEM_READ_WRITE, noOfBytes, NULL, &err);
 if ( err != CL_SUCESS) {
    printf ("Ooops.. Failed");
  }

听起来这个实验证明了 clinfo 声称的内容。我是否缺少任何理论或其他内容?

【问题讨论】:

    标签: opencl gpu gpgpu imx6


    【解决方案1】:

    因为缓冲区和图像是在 OpenCL context(不是 OpenCL 设备)上分配的,实际的设备分配通常会延迟到缓冲区在特定设备上使用时才进行。因此,虽然这种分配似乎有效,但如果您尝试在设备上实际使用该缓冲区,则会收到错误消息。

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2021-09-24
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多