24小时热门版块排行榜    

查看: 553  |  回复: 1

_yixiao

铁虫 (小有名气)

[交流] 【求助】VC++ 9.0 中的一段并行程序,与串行结果不符 已有1人参与

用的visual studio 2008中的并行功能尝试了一下并行计算,可算,但是结果和串行计算不符,不晓得原因何在。。。大家帮忙看看啊,谢谢了
程序的大体构架如下:

do
{
     for(k=0;k<=z0;k++)
     {
        OnWendu(k);   //////////////////////////////调用该函数,见下
        ......
        ......
     }
}
while(...);



OnWendu(int k)  /////////调用
{

       #pragma omp parallel for   ////////////////////////在此加了循环并行语句,头文件等其他地方也已添加代码
       for(j=0;j<=yy;j++)
        {
             for(i=0;i<=xx;i++)
             {
                   if (i==xK && j==0)
                   {
                    ......
                    }
                   else if (i==xJ && j==0)
                   {
                    ......
                   }
                  else if (i==xJ && j==yA)
                  {
                   ........
                  }
                  ......
                  ......   ///////////////////////此处均为else if 语句代码
                 else
        {
               ;
        }     //////////for循环里面我觉得是可以进行并行计算的,不存在数据相关
            }
     }
}


以上即是程序的大体结构,但计算结果不仅时间不减反增,结果也与串行计算结果不符。不晓得错在哪里?
从资料上看,#pragma omp parallel for已经包含了隐式栅障,多个线程执行完for循环后才往下执行,应该同步了啊?
if里是导热微分方程,只与上一时刻的数据有关,每一次for循环都是这次同一时刻的,应该没有依赖性,可以并行的啊。。。
回复此楼
信仰我所必须相信的
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

_yixiao

铁虫 (小有名气)

该程序是传热计算的一部分,OnWendu里进行的是一个横截面上各个点的温度计算,用到的导热差分方程、传热示意图如下,不同节点方程有相应的变化。
并行计算主要针对的就是这整个横截面的传热计算,不知道这次有没有说明白。。。



信仰我所必须相信的
2楼2010-08-03 19:57:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 _yixiao 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见