代码之家  ›  专栏  ›  技术社区  ›  Whoami

为什么全局内存的分配比GPU中的大小更成功?

  •  3
  • Whoami  · 技术社区  · 6 年前

    我正在试用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
    

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

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

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   Dithermaster    6 年前

    因为缓冲区和图像是在OpenCL上分配的 上下文 (不是OpenCL )实际的设备分配通常被推迟到缓冲区在特定设备上使用。因此,虽然这个分配似乎是有效的,但是如果你试图在你的设备上实际使用这个缓冲区,你会得到一个错误。