PDA

View Full Version : where is stored my cl_mem



alpha
02-05-2010, 12:52 PM
Hi,

OpenCL Programming Guide for Mac OS X say (page 34):

In this example, the first read buffer is allocated with the CL_MEM_USE_HOST_PTR flag set. In contrast, the second read buffer is allocated with CL_MEM_COPY_HOST_PTR flag set. In both cases, you must also provide a pointer to your data. When the CL_MEM_USE_HOST_PTR flag is set, the OpenCL implementation has the option of caching the data on the OpenCL device, but it keeps the buffers on the two devices synchronized ; when that flag is not set, it always allocates the memory on the host device.
I have trouble with the last sentence of the quote. Is it true that "no flag = cl_mem on the host memory" ?!

If I create a buffer with :

memObj = clCreateBuffer(context, FLAG, sizeof(cl_float) * n, NULL, NULL);
memory is allocated on the device memory, right ?

jjs
02-05-2010, 01:25 PM
I have trouble with the last sentence of the quote. Is it true that "no flag = cl_mem on the host memory" ?!

If I understand what you are asking, the answer is NO. If you call something like:

clCreateBuffer(context, CL_MEM_READ_ONLY, sizeof(float) * NUM_ELEMENTS, NULL, &err)
this will tell OpenCL that you want to create space on the device. You must later populate this space with actual data, possibly with a call like this:

clEnqueueWriteBuffer(commands, input, CL_TRUE, 0, sizeof(float) * NUM_ELEMENTS, (void*) zeros, 0, NULL, NULL)
Make sense? All calls to clCreateBuffer are about allocating space on the device, it's just a question of whether or not that space is populated by an existing host-side buffer (CL_MEM_COPY_HOST_PTR), or tied to and synchronized with an existing host-side buffer (CL_MEM_USE_HOST_PTR).

jjs
02-05-2010, 01:37 PM
To clarify; you were correct in your assumption that "no flag" concerning the buffer location when calling clCreateBuffer will allocate space on the device.

alpha
02-05-2010, 05:41 PM
ok thanks, that confirms what I thought.