研究文章

优化数据传输基于OpenCL事件管理机制

清单2

Himeno基准代码与重叠的通信和计算。
( )cl_command_queue cmd1, cmd2;
( )cl_mem p_new、p_old p_tmp;
( )
( )for (int i(0);我< N;+ + i){
( )/ /交换指针
( )p_tmp = p_new;p_new = p_old;p_old = p_tmp;
( )如果(排名% 2 = = 0){
( )/ /计算上部
( )jacobi_kernel_even_A (cmd1 p_new,…);
( )/ /更新飞机底部
( )MPI_Irecv(…);
( )clEnqueueReadBuffer (cmd2 p_old CL_FALSE,…);
( )clFinish (cmd2);/ /阻塞
( )MPI_Send(…);/ /阻塞
( )MPI_Wait(…);/ /阻塞
( )clEnqueueWriteBuffer (cmd2 p_old CL_FALSE,…);
( )/ /计算较低的部分
( )jacobi_kernel_even_B (cmd2 p_new,…);
( )/ /更新飞机顶部
( )MPI_Irecv(…);
( )clEnqueueReadBuffer (cmd1 p_new CL_FALSE,…);
( )clFinish (cmd1);/ /阻塞
( )MPI_Send(…);/ /阻塞
( )MPI_Wait(…);/ /阻塞
( )clEnqueueWriteBuffer (cmd1 p_new CL_FALSE,…);
( )}
( )其他的{
( )jacobi_kernel_odd_B (cmd1 p_new,…);
( )MPI_Irecv(…);
( )clEnqueueReadBuffer (cmd2 p_old CL_FALSE,…);
( )clFinish (cmd2);/ /阻塞
( )MPI_Send(…);/ /阻塞
( )MPI_Wait(…);/ /阻塞
( )clEnqueueWriteBuffer (cmd2 p_old CL_FALSE,…);
( )江淮obi_kernel_odd_A (cmd2 p_new,…);
( )MPI_Irecv(…);
( )clEnqueueReadBuffer (cmd1 p_new CL_FALSE,…);
( )clFinish (cmd1);/ /阻塞
( )MPI_Send(…);/ /阻塞MPI_Wait ();/ /阻塞
( )clEnqueueWriteBuffer (cmd1 p_new CL_FALSE,…);
( )}clFinish (cmd1); clFinish (cmd2);* / / *误差计算
( )}