| ()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);* / / *误差计算 |
| ()} |