想问一下,多核CPU与SMP架构的高性能计算机有什么编程上的类似或者不同之处?具体要注意哪些区别?

Hutcher 2008-05-15 04:55:40
如题,谢谢!
...全文
153 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hutcher 2008-05-15
  • 打赏
  • 举报
回复
int find_steady_state (int p, int id, int my_rows, double **u, double **w)
{
double diff; /* 当前进程最大温差 */
double global_diff; /* 全局最大温差 */
int i, j;
int its; /* 迭代次数 */
MPI_Status status;
double tdiff; /* 当前线程最大温差 */

its = 0;
for (;;) {

/* 交换辅助网格点上的近似解 */
if (id > 0)
MPI_Send (u[1], N, MPI_DOUBLE, id-1, 0, MPI_COMM_WORLD);
if (id < p-1) {
MPI_Send (u[my_rows-2], N, MPI_DOUBLE, id+1, 0, MPI_COMM_WORLD);
MPI_Recv (u[my_rows-1], N, MPI_DOUBLE, id+1, 0, MPI_COMM_WORLD,
&status);
}
if (id > 0)
MPI_Recv (u[0], N, MPI_DOUBLE, id-1, 0, MPI_COMM_WORLD, &status);

/* 更新求得的数值解 */
diff = 0.0;
#pragma omp parallel private (i, j, tdiff)
{
tdiff = 0.0;
#pragma omp for
for (i = 1; i < my_rows-1; i++)
for (j = 1; j < N-1; j++) {
w[i][j] = (u[i-1][j] + u[i+1][j] +
u[i][j-1] + u[i][j+1])/4.0;
if (fabs(w[i][j] - u[i][j]) > tdiff)
tdiff = fabs(w[i][j] - u[i][j]);
}
#pragma omp for nowait
for (i = 1; i < my_rows-1; i++)
for (j = 1; j < N-1; j++)
u[i][j] = w[i][j];
#pragma omp critical
if (tdiff > diff) diff = tdiff;
}
MPI_Allreduce (&diff, &global_diff, 1, MPI_DOUBLE, MPI_MAX,
MPI_COMM_WORLD);

/* 中止条件 */
if (global_diff <= EPSILON) break;
its++;
}
return its;
}

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧