I have few things that I don’t understand when using clEnqueueMigrateMemObjects()
.
1.Let’s say I have two command queues (cmdq0 and cmdq1) that are associated with each OpenCL device (device 0 and device 1). And let’s say that the cl_mem
objects b0
and b1
are written for cmdq0
and cmdq1
, respectively. When I call clEnqueueMigrateMemObjects()
like the following
err = clEnqueueMigrateMemObjects(cmdq0, &b1, CL_MIGRATE_MEM_OBJECT_UNDEFINED, 0, NULL, NULL);
does this mean that 'the buffer b1
is transferred to the cmdq0
'? or ‘the ownership of the buffer b1
is transferred to the cmdq0
, so that the buffer transfer kernel should be executed ?’.
2.Once the buffer b1
is transferred to cmdq0
, does this state stay this way until clEnqueueMigrateMemObjects()
is called again (with switched input from the above example)? or is this just a one time thing?
3.So, before any kernel execution is made, the arguments should be set using clSetKernelArg()
. But, once a buffer transfer is made by clEnqueueMigrateMemObjects()
should there be an additional process of clSetKernelArg()
for the transferred buffer?
Thanks.