Research Article
Optimized Data Transfers Based on the OpenCL Event Management Mechanism
Listing 5
A code with the OpenCL extension for host-to-device communication.
| () cl_context ctx; | | () MPI_Request req; | | () cl_event evt[2]; | | () | | () if( rank == 0 ){ | | () /* receiving data from a remote device */ | | () MPI_Irecv(recvbuf, bufsz, MPI_CL_MEM, 1, 0, MPI_COMM_WORLD,&req); | | () /* creating an event object of MPI_Irecv */ | | () evt[0] = clCreateEventFromMPIRequest(ctx,&req,NULL); | | () /* executing a kernel during the data transfer */ | | () clEnqueueNDRangeKernel(…, &evt[1]); | | () | | () /* executing this after the computation and communication */ | | () clEnqueueWriteBuffer(cmd, buf, …, 2, evt, NULL); | | () } | | () else if(rank == 1){ | | () /* send data to a remote host */ | | () clEnqueueSendBuffer(cmd, buf, CL_TRUE, 0, bufsz, 0,…); | | () } |
|