AMD OpenCl implementation allocate buffer on device on the first use. you can allocate 8GB of buffers. when you dont pass COPY_HOST_PTR then they are not allocated at all. when you do they are copied to host memory. they are allocated at device only when you enqueue kernel which use them.
and they stay there until you release then. if you enqueue kernel whcih use same buffer on multiple devices then this buffer is allocated on all used devices.
more in AMD OpenCL programing guide 4.5
i am not sure but clEnqueueWrite/Read seems allocate buffer on device.