I allocate the cl_mem buffer on the GPU and work on it, which works fine until a certain size is exceeded. In this case, the distribution itself is successfully executed, but the execution or copying is not performed. I want to use the device’s memory for faster work, so I allocate as:
buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);
Now what I don't understand is the size limit. I am copying about 16 MB, but should be able to use about 128 MB (see CL_DEVICE_MAX_MEM_ALLOC_SIZE ).
Why are these numbers so different?
Here are some excerpts from 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
source share