where is stored my cl_mem

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 ?

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).

To clarify; you were correct in your assumption that “no flag” concerning the buffer location when calling clCreateBuffer will allocate space on the device.

ok thanks, that confirms what I thought.