PLuTo 编译器示例17-20
17)heat-2d,二维热传导方程,这个好理解
#pragma scopfor (int t = 0; t < T; t++) {for (int i = 1; i < N + 1; i++) {for (int j = 1; j < N + 1; j++) {A[(t + 1) % 2][i][j] =0.125 * (A[t % 2][i + 1][j] - 2.0 * A[t % 2][i][j] +A[t % 2][i - 1][j]) +0.125 * (A[t % 2][i][j + 1] - 2.0 * A[t % 2][i][j] +A[t % 2][i][j - 1]) +A[t % 2][i][j];}}}
#pragma endscop
OMP
#pragma scopfor (int t = 0; t < T; t++) {
#pragma omp parallel forfor (int i = 1; i < N + 1; i++) {for (int j = 1; j < N + 1; j++) {A[(t + 1) % 2][i][j] =0.125 * (A[t % 2][i + 1][j] - 2.0 * A[t % 2][i][j] +A[t % 2][i - 1][j]) +0.125 * (A[t % 2][i][j + 1] - 2.0 * A[t % 2][i][j] +A[t % 2][i][j - 1]) +A[t % 2][i][j];}}}
#pragma endscop
这个也没有错。
18)heat-3d
#pragma scopfor (t = 0; t < T - 1; t++) {for (i = 1; i < N + 1; i++) {for (j = 1; j < N + 1; j++) {for (k = 1; k < N + 1; k++) {A[(t + 1) % 2][i][j][k] =0.125 * (A[t % 2][i + 1][j][k] - 2.0 * A[t % 2][i][j][k] +A[t % 2][i - 1][j][k]) +0.125 * (A[t % 2][i][j + 1][k] - 2.0 * A[t % 2][i][j][k] +A[t % 2][i][j - 1][k]) +0.125 * (A[t % 2][i][j][k - 1] - 2.0 * A[t % 2][i][j][k] +A[t % 2][i][j][k + 1]) +A[t % 2][i][j][k];}}}}
#pragma endscop
19)jacobi-2d-imper,这个其实和heat-2d类似
#pragma scopfor (t=0; t<T; t++) {for (i=2; i<N-1; i++) {for (j=2; j<N-1; j++) {b[i][j]= 0.2*(a[i][j]+a[i][j-1]+a[i][1+j]+a[1+i][j]+a[i-1][j]);}}for (i=2; i<N-1; i++) {for (j=2; j<N-1; j++) {a[i][j]=b[i][j];}}}
#pragma endscop
一直没有搞清楚,多面体和整数规划有什么关系?