Hi,
clCreateBuffer API doesn't act like this. In general, OpenCL APIs which support en-queuing a task to a command queue have form like "clEnqueue<task>".
Also, memory objects are valid for all the devices within the context, whereas commands and command queues are device specific. Runtime manages actual allocation (such as location and time of allocation) depending on the memory flag and usage.
You may check below API which provides explicit control over the location of the memory objects and ensures that an object is allocated on a specific device prior to usage. More importantly, it supports clEnqueue<> form.
clEnqueueMigrateMemObjects
Regards,