首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手能帮小弟我把这段代码改成openmp并行计算的,多谢

2012-04-20 
谁能帮我把这段代码改成openmp并行计算的,谢谢谁能帮我把下面的代码用openmp并行化,谢谢要求:并行化后总的

谁能帮我把这段代码改成openmp并行计算的,谢谢
谁能帮我把下面的代码用openmp并行化,谢谢
要求:并行化后总的执行时间要缩短才行哦
并行化效率越高越好哦

C/C++ code
 
for(i=0;i <10000;i++) {
/****calculate the content of each componets ****/
    if(record==1){


                if(PPP[i][4]==0)      y_S0=y_S0+1;
                else if(PPP[i][4]==1) y_S1=y_S1+1;
                else if(PPP[i][4]==2) y_S2=y_S2+1;
                else if(PPP[i][4]==3) y_S3=y_S3+1;

                if(PPP[i][6]==0)        P_S0=P_S0+1;
                else if(PPP[i][6]==1) P_S1=P_S1+1;
                else if(PPP[i][6]==2) P_S2=P_S2+1;

                if(PPP[i][7]==0)        qm_S0=qm_S0+1;
                else if(PPP[i][7]==1) qm_S1=qm_S1+1;

                if(PPP[i][8]==0)        ka_S0=ka_S0+1;
                else if(PPP[i][8]==1) ka_S1=ka_S1+1;

                if(PPP[i][9]==0)        kb_S0=kb_S0+1;
                else if(PPP[i][9]==1) kb_S1=kb_S1+1;
                else if(PPP[i][9]==2) kb_S2=kb_S2+1;

                    Q_S0+=PPP[i][10];
                    Q_S1+=PPP[i][11];
          }

/****calculate the reaction rate of each reaction using reaction rules****/
    if(PPP[i][4] == 0 && PPP[i][5] == 1)    {
                        rule[rule_num[0]][0]=i+1;
                        rule_num[0]=rule_num[0]+1;
            }
            else  if(PPP[i][4] == 1 && PPP[i][5] == 1)    {
                        rule[rule_num[1]][1]=i+1;
                        rule_num[1]=rule_num[1]+1;
            }
            else    if(PPP[i][4] == 2 && PPP[i][5] == 1)      {
                        rule[rule_num[2]][2]=i+1;
                        rule_num[2]=rule_num[2]+1;
            }
            else    if(PPP[i][4] == 3 && PPP[i][5] == 1)      {
                        rule[rule_num[3]][3]=i+1;
                        rule_num[3]=rule_num[3]+1;
            }

            if((PPP[i][4] == 0 && PPP[i][5] == 0) && PPP[i][6] == 1 )        {
                    rule[rule_num[4]][4]=i+1;
                    rule_num[4]=rule_num[4]+1;


                }
            else if((PPP[i][4] == 0 && PPP[i][5] == 1) && PPP[i][6] == 0)        {
                    rule[rule_num[5]][5]=i+1;
                    rule_num[5]=rule_num[5]+1;
                }
            elseif((PPP[i][4] == 1 && PPP[i][5] == 0) && PPP[i][6] == 1)        {
                    rule[rule_num[6]][6]=i+1;
                    rule_num[6]=rule_num[6]+1;
            }
            elseif((PPP[i][4] == 1 && PPP[i][5] == 1) && PPP[i][6] == 0)        {
                    rule[rule_num[7]][7]=i+1; //记录满足rule0 的当前行号
                    rule_num[7]=rule_num[7]+1; //记录满足rule7的总行数
            }
            else if((PPP[i][4] == 2 && PPP[i][5] == 0) && PPP[i][6] == 1)        {
                    rule[rule_num[8]][8]=i+1; //记录满足rule8 的当前行号
                    rule_num[8]=rule_num[8]+1; //记录满足rule8的总行数
                }
            else if((PPP[i][4] == 2 && PPP[i][5] == 1) && PPP[i][6] == 0)        {
                    rule[rule_num[9]][9]=i+1; //记录满足rule9 的当前行号
                    rule_num[9]=rule_num[9]+1; //记录满足rule9的总行数
                }
          else if((PPP[i][4] == 3 && PPP[i][5] == 0) && PPP[i][6] == 1)        {
                    rule[rule_num[10]][10]=i+1; //记录满足rule10 的当前行号
                    rule_num[10]=rule_num[10]+1; //记录满足rule10的总行数
                }
          else if((PPP[i][4] == 3 && PPP[i][5] == 1) && PPP[i][6] == 0)        {
                    rule[rule_num[11]][11]=i+1; //记录满足rule11 的当前行号
                    rule_num[11]=rule_num[11]+1; //记录满足rule11的总行数
                }

            if((PPP[i][6] == 2 && PPP[i][7] == 0) && PPP[i][8] == 0)        {
                    rule[rule_num[12]][12]=i+1; //记录满足rule12 的当前行号
                    rule_num[12]=rule_num[12]+1; //记录满足rule12的总行数
                }
            else  if((PPP[i][6] == 1 && PPP[i][7] == 1) && PPP[i][8] == 0)        {
                    rule[rule_num[13]][13]=i+1; //记录满足rule13 的当前行号
                    rule_num[13]=rule_num[13]+1; //记录满足rule13的总行数
                }


            else if((PPP[i][6] == 2 && PPP[i][7] == 0) && PPP[i][8] == 1)        {
                    rule[rule_num[14]][14]=i+1; //记录满足rule14 的当前行号
                    rule_num[14]=rule_num[14]+1; //记录满足rule14的总行数
                }
            else if((PPP[i][6] == 1 && PPP[i][7] == 1) && PPP[i][8] == 1)        {
                    rule[rule_num[15]][15]=i+1; //记录满足rule15 的当前行号
                    rule_num[15]=rule_num[15]+1; //记录满足rule15的总行数
                }

            if(PPP[i][7] == 1 && PPP[i][8] == 0)        {
                    rule[rule_num[16]][16]=i+1; //记录满足rule16 的当前行号
                    rule_num[16]=rule_num[16]+1; //记录满足rule16的总行数
                }
          else if(PPP[i][7] == 0 && PPP[i][8] == 1)        {
                    rule[rule_num[17]][17]=i+1; //记录满足rule17 的当前行号
                    rule_num[17]=rule_num[17]+1; //记录满足rule17的总行数
                }

            if(PPP[i][8] == 1 && PPP[i][9] == 0)        {
                    rule[rule_num[18]][18]=i+1; //记录满足rule18 的当前行号
                    rule_num[18]=rule_num[18]+1; //记录满足rule18的总行数
                }
            else if(PPP[i][8] == 0 && PPP[i][9] == 1)        {
                    rule[rule_num[19]][19]=i+1; //记录满足rule19 的当前行号
                    rule_num[19]=rule_num[19]+1; //记录满足rule19的总行数
                }
          else if(PPP[i][8] == 1 && PPP[i][9] == 1)        {
                    rule[rule_num[20]][20]=i+1; //记录满足rule20 的当前行号
                    rule_num[20]=rule_num[20]+1; //记录满足rule20的总行数
                }
          else if(PPP[i][8] == 0 && PPP[i][9] == 2)        {
                    rule[rule_num[21]][21]=i+1; //记录满足rule21 的当前行号
                    rule_num[21]=rule_num[21]+1; //记录满足rule21的总行数
                }

            if(PPP[i][9] == 2)        {
                    rule[rule_num[22]][22]=i+1; //记录满足rule22 的当前行号
                    rule_num[22]=rule_num[22]+1; //记录满足rule22的总行数
            }
            else  if(PPP[i][9] == 0)          {
            rate_sum[25] += 1;


                    rule[rule_num[25]][25]=i+1;
                    rule_num[25]=rule_num[25]+1;
                }

            if(PPP[i][9] ==8 && PPP[i][11]>0){
                    rate_sum[23] += PPP[i][11];
                    rule[rule_num[23]][23]=i+1;
                    rule_num[23]=rule_num[23]+1;
            }

            if(PPP[i][9] ==8 && PPP[i][10]>0){
                    rate_sum[24] += PPP[i][10];
                    rule[rule_num[24]][24]=i+1;
                    rule_num[24]=rule_num[24]+1;
              }

                    if(PPP[i][11]>0){
                          rate_sum[26] += PPP[i][11];
                          rule[rule_num[26]][26]=i+1;
                          rule_num[26]=rule_num[26]+1;
                    }
                    if(PPP[i][10]>0){
                          rate_sum[27] += PPP[i][10];
                          rule[rule_num[27]][27]=i+1;
                          rule_num[27]=rule_num[27]+1;
                    }
            if((PPP[i][6] == 1 && PPP[i][7] == 1) && PPP[i][8] == 1)        {
                    rate_sum[28] += 1;
                    rule[rule_num[28]][28]=i+1;
                    rule_num[28]=rule_num[28]+1;
            }
            if(PPP[i][6] == 1 && PPP[i][8] == 1)        {
                    rate_sum[29] += 1;
                    rule[rule_num[29]][29]=i+1;
                    rule_num[29]=rule_num[29]+1;
            }
          if(PPP[i][6]==2){
                          rate_sum[30] += 1;
                          rule[rule_num[30]][30]=i+1;
                          rule_num[30]=rule_num[30]+1;

                          rate_sum[31] += 1;
                          rule[rule_num[31]][31]=i+1;
                          rule_num[31]=rule_num[31]+1;


            }
            if(PPP[i][2] > 0)          {
            rate_sum[32] += PPP[i][2];
                    rule[rule_num[32]][32]=i+1;
                    rule_num[32]=rule_num[32]+1;
            }
            if(PPP[i][3] > 0)          {
            rate_sum[33] += PPP[i][3];
                    rule[rule_num[33]][33]=i+1;
                    rule_num[33]=rule_num[33]+1;

                    rate_sum[34] += PPP[i][3];
                    rule[rule_num[34]][34]=i+1;
                    rule_num[34]=rule_num[34]+1;
            }


    }




[解决办法]
兄弟,自己扛吧,相信自己可以,就一定行的

[解决办法]
帮你顶一个。。。这算得是什么啊。。。
[解决办法]
我居然进入了技术贴~~
[解决办法]
k可以啊 ,顶一下
[解决办法]
进入了技术贴~~
[解决办法]
说点意见
数据组织和算法是相关的
你这段代码的数据组织不咋的
算法也混乱
先组织好数据
提出目标
再研究算法

[解决办法]
以这种方式访问数组编译器无法分析循环间的数据依赖关系,没办法作openmp。

rule[rule_num[0]][0]=i+1; 
rule_num[0]=rule_num[0]+1; 




[解决办法]
以这种方式访问数组编译器无法分析循环间的数据 是哦

热点排行