"streaming" transfert in directGMA for sizes>128MB

Discussion created by evoliptic on Jul 9, 2015
Latest reply on Jul 14, 2015 by evoliptic

hello everybody,


I would like to discuss with you about the possibility for transfert sizes >128MB from FPGA to GPU.


One of elegant solution we could see and we call "streaming" is the following by steps :

1)let's say we allocate 2 buffers or 64MB each in the beginning for directGMA.

2) we write 64MB of data in the first buffer from the FPGA

3) we know starts the data transfer from FPGA to second buffer.

In the mean time, we somehow "deallocate" the property of CL_MEM_BUS_ADRESSABLE_AMD in the first buffer, but we keep references to it to use it in future. after this "deallocation", we create a third buffer for directGMA of 64MB.

4) we can repeat here by writing from FPGA to third buffer, deallocating the second,creating a 4th and do on.

5) transfer finished


In the end, we would get so a GPU filled with a given size of data, and this is elegant; as compared to our current solution which is to copy buffers allocated for directGMA to "saving buffers", allocated normally, during the transfert; it avoids data copying on the GPU and so possible memory latency on the GPU for directGMA.


but :

-how to deallocate the directGMA property of a buffer? clRelease and free make it, but buffers can't be used afterward.

- from the example given above, i create a third buffer after having freed the first one, but i get the adress of the first buffer and so its data. Is it possible so to pass out from this 128 MB, in term of address?


So, is this possible?


And one more question, is it possible to see the influence of copies on the gpu on memory bandwith for DirectGMA?


thanks a lot in advance for your support,