我在GPU上分配一個cl_mem緩衝區並對其進行處理,直到超過特定的大小才能正常工作。在這種情況下,分配本身成功,但執行或複製不成功。我想使用設備的內存更快的操作,所以我分配像:爲什麼我會收到CL_MEM_OBJECT_ALLOCATION_FAILURE?
buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);
現在我不明白的是大小的限制。我正在複製大約16 Mbyte,但應該能夠使用大約128 MB(請參閱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
這是一個未解決和棘手的話題。不幸的是我一直在使用的硬件發生了變化,所以我不知道如何重現這個問題。 – count0 2011-05-04 17:19:20
我現在在GeForce 8800 GTS上遇到了同樣的問題。在每一次運行中,我都會得到不同的尺寸來獲得錯誤,但它的典型範圍是7mb到20mb。最大內存分配大小也是128 MB。 – 2012-06-19 22:14:47