AnsweredAssumed Answered

clEnqueueMakeBuffersResidentAMD

Question asked by borsanyi on Oct 19, 2017
Latest reply on Oct 23, 2017 by dipak

Dear Developers,

 

I am playing with a pair of gfx900 cards (amd rx radeon vega 56)  connected over pcie3 in an ubuntu linux box.

Goal is that the two cards communicate.

The call clEnqueueMakeBuffersResidentAMD is supposed to fill in the cl_bus_address_amd structure.

(which I initialized to zero, before the call)

Well after the this call, both integers in cl_bus_address_amd are still zero, so I cannot proceed to initialize the write

buffers on the writer gpu.

 

From the following code piece you should have an idea what I am doing:

void device_alloc_resident(struct device *D,cl_mem *ptr,cl_bus_address_amd *bus_address,size_t bytes)/*{{{*/

{

    cl_int r;

    cl_mem buffer=clCreateBuffer(D->context,CL_MEM_READ_WRITE|CL_MEM_BUS_ADDRESSABLE_AMD,bytes,NULL,&r);

    opencl_error_check(r);

    r=clEnqueueMigrateMemObjects(D->queue,1,&buffer,CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED,0,NULL,NULL);

    if(r!=CL_SUCCESS) {

        errx(1,"Device memory allocation has failed %s",opencl_strerror(r));

    }

    printf("pre addressess %lu %lu\n",bus_address->surface_bus_address,bus_address->marker_bus_address);

    clEnqueueMakeBuffersResidentAMD(D->queue,1,&buffer,CL_TRUE,bus_address,0,NULL,NULL) CLCHK;

    printf("post addressess %lu %lu\n",bus_address->surface_bus_address,bus_address->marker_bus_address);

    *ptr=buffer;

    D->mem_usage+=bytes;

    clFinish(D->queue);

}/*}}}*/

 

both printfs write 0 0

 

thanks.

Outcomes