我在 GPU 和它的工作,它的工作原理细直至超过一定规模。在这种情况下,分配本身的成功,但执行或复制不会。我确实想,所以我喜欢分配给使用设备的存储器,用于更快的操作:

buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);

现在我不明白的是大小限制。我复制大约16兆字节,但应能够使用约128兆字节(参见CL_DEVICE_MAX_MEM_ALLOC_SIZE)。

为什么这些数字相差这么多?


下面是一些摘自oclDeviceQuery:

 CL_PLATFORM_NAME:  NVIDIA
 CL_PLATFORM_VERSION:  OpenCL 1.0 
 OpenCL SDK Version:  4788711

  CL_DEVICE_NAME:          GeForce 8600 GTS
  CL_DEVICE_TYPE:          CL_DEVICE_TYPE_GPU
  CL_DEVICE_ADDRESS_BITS:              32
  CL_DEVICE_MAX_MEM_ALLOC_SIZE:  128 MByte
  CL_DEVICE_GLOBAL_MEM_SIZE:     255 MByte
  CL_DEVICE_LOCAL_MEM_TYPE:      local
  CL_DEVICE_LOCAL_MEM_SIZE:      16 KByte
  CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:  64 KByte
有帮助吗?

解决方案

clCreateBuffer实际上不会在设备上创建的缓冲器。这是有道理的,因为在创建时的司机不知道该设备将使用缓冲区(记得上下文可以有多个设备)。缓冲器将在实际设备上时,排队的写或创建在启动内核,是以缓冲器作为参数。

对于16MB的限制,您使用的是最新的驱动程序(195.xx)?如果是这样,你应该与NVIDIA要么通过href="http://forums.nvidia.com/index.php?showforum=134" rel="nofollow noreferrer">论坛或直接在

其他提示

不要忘记你发生什么其他的内存已经在设备上使用(如果这也是你的显卡,那你的显示器使用的内存)。

(有没有办法得到当前的可用内存,或者最大的片段,或诸如此类?)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top