In the context of this work, the most important functionality is reading/writing on global memory. The important point is that those operations are one-sided, non-blocking and asynchronous,allowing the program to continue its execution and hence take better advantage of CPU cycles. If the application needs to make sure the data was transferred (read or written),it needs to issue a wait operation that blocks until the transfer has finished, asserting that the data buffer is usable