如何把这段代码改成OMP多线程代码?谢谢

situjunc 2016-02-13 10:08:55
额,有一个三维数组h[2][100][100],其实就是两个二维数组h[0][99][99]和h[1][99][99]。
其中h[0][49][49]=100,h[1][49][49]=100。剩下的所有数据初始化为20。执行下面的迭代代码后,就会数据就会改变。其实就是热量散布问题啦.....
现在要怎么把这段顺序改成#pragma omp parallel 这种并行代码呢?谢谢

for (iteration = 0; iteration < 999; iteration++) {
for (i = 1; i < 99; i++){
for (j = 1; j < 99; j++){
h[next][i][j] = 0.25 * (h[current][i-1][j] + h[current][i+1][j] + h[current][i][j-1] + h[current][i][j+1]);
}
}
current = next; // swap values of current and next
next = 1 - current;
}
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-02-14
  • 打赏
  • 举报
回复
你需要让每次循环是独立的,这样才好用并行运算
paschen 2016-02-14
  • 打赏
  • 举报
回复
引用 6 楼 situjunc 的回复:
[quote=引用 5 楼 paschen 的回复:] 你需要让每次循环是独立的,这样才好用并行运算
额,但是这个问题,后面的数据受之前的数据影响,所以怎么独立呢.....[/quote] http://wenku.baidu.com/link?url=u1gXSZipz8P7yggkOOUcr3crFcvFCvGXi6NksfkrHlgU4FJ9iTPk-4VL1otCqlk6g4gph3dufq2z_uhxm4mHt-S41Y0EY6ffvLOOisllYSO
situjunc 2016-02-14
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
你需要让每次循环是独立的,这样才好用并行运算
额,但是这个问题,后面的数据受之前的数据影响,所以怎么独立呢.....
relaxisland 2016-02-13
  • 打赏
  • 举报
回复
看一下,这个貌似是有难度的 后一次循环 依赖于 前一次循环的计算结果
paschen 2016-02-13
  • 打赏
  • 举报
回复
#pragma omp parallel for
situjunc 2016-02-13
  • 打赏
  • 举报
回复
引用 楼主 situjunc 的回复:
额,有一个三维数组h[2][100][100],其实就是两个二维数组h[0][99][99]和h[1][99][99]。 其中h[0][49][49]=100,h[1][49][49]=100。剩下的所有数据初始化为20。执行下面的迭代代码后,就会数据就会改变。其实就是热量散布问题啦..... 现在要怎么把这段顺序改成#pragma omp parallel 这种并行代码呢?谢谢

for (iteration = 0; iteration < 999; iteration++) {
        for (i = 1; i < 99; i++){
             for (j = 1; j < 99; j++){
                 h[next][i][j] = 0.25 * (h[current][i-1][j] + h[current][i+1][j] + h[current][i][j-1] + h[current][i][j+1]);
             }
        }
        current = next; // swap values of current and next
        next = 1 - current;
    }
恩,这个的确是要用#pragma omp parallel for,但是shared,private和其他部分老出错,并行代码出来的结果总是和顺序代码结果不一样。 所以并行代码要如何写呢?谢谢
situjunc 2016-02-13
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
#pragma omp parallel for
恩,的确是用#pragma omp parallel for,但是shared,private和其他部分老出错,并行代码出来的结果总是和顺序代码结果不一样。 版主大大,可以提供一下具体的并行代码吗?谢谢

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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