为什么GPU的全局内存分配在超过限制大小时仍能成功?

3

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

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

现在,当我尝试分配900兆字节的全局大小时,我没有收到任何错误信息,并且操作成功。

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

这个实验似乎证明了clinfo所声称的内容。我是否漏掉了任何理论或其他方面?
1个回答

4

由于缓冲区和图像是在OpenCL上下文(而不是OpenCL设备)上分配的,因此实际设备分配通常会被推迟,直到该缓冲区在特定设备上被使用。因此,虽然这种分配似乎可以正常工作,但如果您尝试在设备上实际使用该缓冲区,则会出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接