亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? npsm.c

?? 在MPI上實現并行串匹配的源代碼。
?? C
字號:
# include  <malloc.h># include  <sys/stat.h># include  <sys/types.h># include  <stdio.h># include  <string.h># include  <mpi.h>#define   MAX(m,n)    (m>n?m:n)typedef struct{  int pedlen;  int psuffixlen;  int pednum;}pntype;/************************************************************************//* this procedure is to analysis period of a given string and calculate   its next and nextval value.   input:       W: pattern string       patlen: length of pattern string   output:       nextval: nextval value       pped: period information*/void Next(W,patlen,nextval,pped)char *W;int patlen;int *nextval;pntype *pped;{     int i,j,plen;     int *next;     if((next=(int *)malloc((patlen+1)*sizeof(int)))==NULL)     {        printf("no enough memory\n");        exit(1);     }    /*  calculate next and nextval  */         next[0]=nextval[0]=-1;     j=1;     while(j<=patlen)     {       i=next[j-1];        while(i!=(-1) && W[i]!=W[j-1])  i=next[i];        next[j]=i+1;        if(j!=patlen)        {           if( W[j]!=W[i+1])              nextval[j]=i+1;           else              nextval[j]=nextval[i+1];         }        j++;     }  /* end while */     pped->pedlen=patlen-next[patlen];      pped->pednum=(int)(patlen/pped->pedlen);      pped->psuffixlen=patlen%pped->pedlen;      free(next);}/***********************************************************************//* this procedure is a modified kmp algorithm   input:      T: text string      W: pattern string      textlen: text length      patlen: pattern length      nextval: nextval value      pped: pattern period information      prefix_flag: indicate whether to calculate the prefix 0:yes 1:no      matched_num: matched pattern string length   output:      match: match result      prefixlen: maximal pattern prefix length at the end of text*/void kmp(T,W,textlen,patlen,nextval,pped,prefix_flag,matched_num,match,         prefixlen)char *T,*W;int textlen,patlen;int *nextval;pntype *pped;int prefix_flag;int matched_num;int *match,*prefixlen;{    int i,j;    i=matched_num;                  /* i is text pointer */    j=matched_num;                  /* j is pattern pointer */    while(i<textlen)    {        if((prefix_flag==1)&&(i-j+patlen-1>=textlen))           break;        while(j!=(-1) && W[j]!=T[i])  j=nextval[j];        if(j==(patlen-1))      /* match */        {       /*  match[i-(patlen-1)]=1;*/           if(pped->pednum+pped->psuffixlen==1)  /* U */               j = -1 ;            else                                    /* UE or U(k)E */               j=patlen-1-pped->pedlen;          }         j++;         i++;    }   (*prefixlen)=j;}/*************************************************/ /* Rebuild is used to reconstruct nextval and W **/ /* W is pattern string, nextval                 **/ /*************************************************/ void Rebuild_info(patlen,pped,nextval,W) int patlen; pntype *pped; int *nextval; char *W; {         int i;                  if (pped->pednum == 1)              memcpy(W+pped->pedlen,W,pped->psuffixlen);         else              {                  memcpy(W+pped->pedlen,W,pped->pedlen);                for (i=3; i<=pped->pednum; i++){                       memcpy(W+(i-1)*pped->pedlen,W,pped->pedlen);                      memcpy(nextval+(i-1)*pped->pedlen,nextval+pped->pedlen,                             pped->pedlen*sizeof(int));                }                 if(pped->psuffixlen!=0)                {                  memcpy(W+(i-1)*pped->pedlen,W,pped->psuffixlen);                  memcpy(nextval+(i-1)*pped->pedlen,nextval+pped->pedlen,                         pped->psuffixlen*sizeof(int));                            }            } }  /**********************************************************//*  This procedure is to generate text string             *//*  input:                                                */ /*       strlen: string length                         *//*       pedlen: period length                            *//*  output:                                               *//*       string: string                                   */               /**********************************************************/ void gen_string(strlen,pedlen,string)int strlen,pedlen;char *string;{   int suffixlen,num,i,j;   srand(1);   for(i=0;i<pedlen;i++){        num=rand()%26;        string[i]='a'+num;   }   for(j=1;j<(int)(strlen/pedlen);j++)        strncpy(string+j*pedlen,string,pedlen);   if((suffixlen=strlen%pedlen)!=0)        strncpy(string+j*pedlen,string,suffixlen);}   void GetFile(char *filename,char **place, int *number) {         FILE *fp;         struct stat statbuf;      /* include <sys\stat.h> */          if ((fp=fopen(filename,"rb"))==NULL)                 {printf ("Error open file %s\n",filename);                  exit(0);                 }         fstat(fileno(fp),&statbuf);      /* get file len in byte */         if(((*place)=(char *)malloc(sizeof(char)*statbuf.st_size)) == NULL)                {printf ("Error alloc memory\n");                 exit(1);                }        if (fread((*place),1,statbuf.st_size,fp)!=statbuf.st_size)                 {printf ("Error in reading num\n");                  exit(0);                 }         fclose (fp);         (*number)=statbuf.st_size; } void PrintFile_int(filename,t,len) char *filename;int *t;int len; {         FILE *fp;         int i;        if ((fp=fopen(filename,"a"))==NULL)                 {printf ("Error open file %s\n",filename);                  exit(0);                 }         for (i=0; i<=len-1; i++)            if(t[i]==1)                fprintf (fp,"(%d)  +\n",i);            else                fprintf (fp,"(%d)  -\n",i);        fclose (fp); }          void PrintFile(filename,t,len) char *filename,*t;int len; {         FILE *fp;         int i;        if ((fp=fopen(filename,"w"))==NULL)                 {printf ("Error open file %s\n",filename);                  exit(0);                 }         for (i=0; i<=len-1; i++)                 fprintf (fp,"(%d)  %c\n",i,t[i]);         fclose (fp); }  void main(argc,argv) int  argc; char *argv[]; {      char *T,*W;     int *nextval,*match;     int textlen,patlen,pedlen,nextlen_send;     pntype pped;     int i,myid,numprocs,prefixlen,ready;     double cal_startwtime,cal_endwtime,comm_startwtime,           comm_endwtime,cal_time,comm_time,total_time,           start_wtime,end_wtime;    MPI_Status  status;      MPI_Init(&argc,&argv);     MPI_Comm_size(MPI_COMM_WORLD,&numprocs);     MPI_Comm_rank(MPI_COMM_WORLD,&myid);     nextlen_send=0;    ready=1;    cal_time=comm_time=total_time=0;      textlen=atoi(argv[1]);    textlen=textlen/numprocs;    pedlen=atoi(argv[2]);    if((T=(char *)malloc(textlen*sizeof(char)))==NULL)    {          printf("no enough memory\n");          exit(1);    }    gen_string(textlen,pedlen,T);    /***************** processor 0 get  pattern ****************/    if(myid==0)                          {         FILE *fp;        if ((fp=fopen("result","a"))==NULL)        {                 printf ("Error open file %s\n");                 exit(0);        }         fprintf(fp,"processor num = %d \n",numprocs);        fprintf(fp,"textlen = %d\n",textlen*numprocs);           GetFile("pattern.dat",&W,&patlen);         fprintf(fp,"patlen= %d\n",patlen);         if((nextval=(int *)malloc(patlen*sizeof(int)))==NULL)        {           printf("no enough memory\n");           exit(1);        }        cal_startwtime = MPI_Wtime();          Next(W,patlen,nextval,&pped);         if(numprocs>1)        {           if (pped.pednum==1)                 nextlen_send = patlen;            else                nextlen_send = pped.pedlen*2;         }        cal_endwtime=MPI_Wtime();        cal_time=cal_endwtime-cal_startwtime;        total_time=cal_time;        fprintf(fp,"period len = %d\n",pped.pedlen);        fclose(fp);    }    /*****************************************************************/    /**************** distribute  pattern *********************/    if(numprocs>1)    {        MPI_Bcast(&patlen, 1, MPI_INT, 0, MPI_COMM_WORLD);  /* patlen */    /*  if((match=(int *)malloc(textlen*sizeof(int)))==NULL)        {             printf("no enough memory\n");             exit(1);        }*/         if(myid!=0)            if(((nextval=(int *)malloc(patlen*sizeof(int)))==NULL)||              ((W=(char *)malloc(patlen*sizeof(char)))==NULL))            {                printf("no enough memory\n");                exit(1);            }        MPI_Barrier(MPI_COMM_WORLD);        start_wtime=comm_startwtime=MPI_Wtime();        MPI_Bcast(&pped,3,MPI_INT,0,MPI_COMM_WORLD);   /* period character */         MPI_Bcast(&nextlen_send,1,MPI_INT,0,MPI_COMM_WORLD);        /* nextlen_send */        MPI_Bcast(nextval,nextlen_send,MPI_INT,0,MPI_COMM_WORLD);         /* nextval */         MPI_Bcast(W,pped.pedlen, MPI_CHAR, 0, MPI_COMM_WORLD);           /* broadcast pattern period string */         MPI_Barrier(MPI_COMM_WORLD);        comm_endwtime=MPI_Wtime();         comm_time=comm_endwtime-comm_startwtime;     }    else    {       start_wtime=MPI_Wtime();    }   /*********************************************************************/   /***************************  matching *******************************/    if((numprocs==1)||(patlen==1))    {        MPI_Barrier(MPI_COMM_WORLD);      cal_startwtime=MPI_Wtime();      kmp(T,W,textlen,patlen,nextval,&pped,1,0,match,&prefixlen);    }    else     {         MPI_Barrier(MPI_COMM_WORLD);       cal_startwtime=MPI_Wtime();              if(myid!=0)          Rebuild_info(patlen,&pped,nextval,W);        if(myid!=numprocs-1)          kmp(T,W,textlen,patlen,nextval,&pped,0,0,match+patlen-1,&prefixlen);        else          kmp(T,W,textlen,patlen,nextval,&pped,1,0,match+patlen-1,&prefixlen);        MPI_Barrier(MPI_COMM_WORLD);       cal_endwtime=MPI_Wtime();        cal_time=cal_time+cal_endwtime-cal_startwtime;       comm_startwtime=MPI_Wtime();       if(myid<numprocs-1)           MPI_Send(&prefixlen,1,MPI_INT,myid+1,99,MPI_COMM_WORLD);        if(myid>0)           MPI_Recv(&prefixlen,1,MPI_INT,myid-1,99,MPI_COMM_WORLD,&status);         MPI_Barrier(MPI_COMM_WORLD);       comm_endwtime=MPI_Wtime();       comm_time=comm_time+comm_endwtime-comm_startwtime;        cal_startwtime=MPI_Wtime();       if((myid>0)&&(prefixlen!=0))              kmp(T-prefixlen,W,prefixlen+patlen-1,patlen,nextval,&pped,               1,prefixlen,match+patlen-1-prefixlen,&prefixlen);         MPI_Barrier(MPI_COMM_WORLD);    }    end_wtime=cal_endwtime=MPI_Wtime();    cal_time=cal_time+cal_endwtime-cal_startwtime;    total_time=total_time+end_wtime-start_wtime;    /*******************************************************************/    /****************  print result **********************************//*  if(myid==0)    {        if(patlen!=1)           PrintFile_int("match_result",match+patlen-1,textlen-patlen+1);        else           PrintFile_int("match_result",match,textlen);        if(numprocs>1)           MPI_Send(&ready,1,MPI_INT,1,0,MPI_COMM_WORLD);    }    else    {        MPI_Recv(&ready,1,MPI_INT,myid-1,myid-1,MPI_COMM_WORLD,&status);        PrintFile_int("match_result",match,textlen);        if(myid!=numprocs-1)           MPI_Send(&ready,1,MPI_INT,myid+1,myid,MPI_COMM_WORLD);    } */    if(myid==0){         FILE *fp;/*        double t1,t2,t3;        if(numprocs>1)        {           MPI_Send(&ready,1,MPI_INT,1,0,MPI_COMM_WORLD);           for(i=1;i<numprocs;i++)           {              MPI_Recv(&t1,1,MPI_DOUBLE,i,i,MPI_COMM_WORLD,&status);              MPI_Recv(&t2,1,MPI_DOUBLE,i,i+1,MPI_COMM_WORLD,&status);              MPI_Recv(&t3,1,MPI_DOUBLE,i,i+2,MPI_COMM_WORLD,&status);              cal_time=cal_time+t1;              comm_time=comm_time+t2;              total_time=total_time+t3;           }           cal_time=cal_time/numprocs;           comm_time=comm_time/numprocs;           total_time=total_time/numprocs;        }*/        if ((fp=fopen("result","a"))==NULL)        {                 printf ("Error open file %s\n");                 exit(0);        }        fprintf(fp,"calculate time = %f \n",cal_time);         fprintf(fp,"communicate time = %f \n",comm_time);         fprintf(fp,"total time = %f \n\n",total_time);        fclose(fp);    } /*    else    {        MPI_Recv(&ready,1,MPI_INT,myid-1,myid-1,MPI_COMM_WORLD,&status);        MPI_Send(&cal_time,1,MPI_DOUBLE,0,myid,MPI_COMM_WORLD);        MPI_Send(&comm_time,1,MPI_DOUBLE,0,myid+1,MPI_COMM_WORLD);        MPI_Send(&total_time,1,MPI_DOUBLE,0,myid+2,MPI_COMM_WORLD);        if(myid!=numprocs-1)           MPI_Send(&ready,1,MPI_INT,myid+1,myid,MPI_COMM_WORLD);    }*/    free(T);    free(W);    free(nextval); /* free(match);*/    MPI_Finalize();  }  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区av在线播放| 99久久久国产精品| 丁香六月久久综合狠狠色| 91久久国产最好的精华液| 日韩欧美一区在线| 亚洲免费观看高清| 国内精品写真在线观看 | 国产尤物一区二区| 欧美中文字幕亚洲一区二区va在线 | 884aa四虎影成人精品一区| 欧美激情艳妇裸体舞| 免费黄网站欧美| 欧美日韩高清一区| 亚洲综合激情小说| 成av人片一区二区| 狠狠色丁香久久婷婷综合丁香| 99久久免费国产| 2020国产成人综合网| 日韩精品亚洲一区二区三区免费| 成人av午夜电影| 欧美变态tickle挠乳网站| 偷拍一区二区三区| 欧美在线高清视频| 一区av在线播放| 一本大道久久a久久综合| 欧美国产激情一区二区三区蜜月| 久久国产精品99久久久久久老狼| 51午夜精品国产| 亚洲h精品动漫在线观看| 色偷偷88欧美精品久久久| 国产精品久久二区二区| 国产精华液一区二区三区| www精品美女久久久tv| 久久成人精品无人区| 日韩欧美在线网站| 秋霞电影一区二区| 欧美不卡视频一区| 国产精品一级片| 国产欧美一区二区在线| 国产电影一区二区三区| 国产欧美日本一区视频| 风间由美性色一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 处破女av一区二区| 国产欧美日韩视频在线观看| 韩国毛片一区二区三区| 久久久亚洲高清| 99视频精品在线| 亚洲小说欧美激情另类| 欧美猛男男办公室激情| 久久97超碰国产精品超碰| 精品国产伦一区二区三区观看方式 | 久久综合久色欧美综合狠狠| 国产超碰在线一区| 亚洲欧美经典视频| 91精品久久久久久久久99蜜臂| 六月婷婷色综合| 中文字幕精品一区二区精品绿巨人 | 中文字幕亚洲成人| 欧美三级在线视频| 美女一区二区三区在线观看| 国产欧美精品一区二区色综合朱莉| 99久久综合国产精品| 午夜久久久影院| 久久综合九色综合97_久久久 | 精品午夜一区二区三区在线观看| 2021中文字幕一区亚洲| 91丝袜美腿高跟国产极品老师| 亚洲第一成人在线| 欧美国产日本韩| 欧美人妇做爰xxxⅹ性高电影| 国产一区二区三区在线观看免费| 自拍偷在线精品自拍偷无码专区| 91精品国产欧美一区二区18| 玖玖九九国产精品| 亚洲三级电影网站| 日韩欧美亚洲另类制服综合在线| 粉嫩一区二区三区性色av| 午夜电影一区二区| 国产日韩欧美精品电影三级在线| 欧美午夜不卡视频| 成人性生交大片免费看中文| 石原莉奈在线亚洲二区| 亚洲欧洲在线观看av| 精品日韩一区二区三区| 91福利区一区二区三区| 国产成人综合在线播放| 亚洲h动漫在线| 亚洲人成伊人成综合网小说| 久久久久久一二三区| 欧美剧情片在线观看| 99久久婷婷国产精品综合| 国产一区二区三区久久久| 日本在线不卡一区| 亚洲三级免费电影| 国产精品婷婷午夜在线观看| 精品欧美一区二区三区精品久久| 欧美视频完全免费看| 972aa.com艺术欧美| 国产超碰在线一区| 国产精品一二三区在线| 奇米色一区二区| 亚洲sss视频在线视频| 亚洲精品高清在线观看| 亚洲婷婷综合久久一本伊一区| 久久久亚洲精品石原莉奈| 日韩精品自拍偷拍| 91精品国产高清一区二区三区| 欧美专区亚洲专区| 在线精品观看国产| 91激情在线视频| 色天天综合久久久久综合片| 成人av在线资源| 北岛玲一区二区三区四区| 国产夫妻精品视频| 成人午夜电影久久影院| 国产一区二区网址| 国产69精品久久久久777| 国模一区二区三区白浆| 国产另类ts人妖一区二区| 国产精品一二三四五| 成人动漫一区二区| 色婷婷久久一区二区三区麻豆| 色悠久久久久综合欧美99| 色视频成人在线观看免| 色婷婷亚洲综合| 欧美精品在线观看一区二区| 欧美一区二区三区四区在线观看 | 色先锋aa成人| 欧美群妇大交群的观看方式| 欧美肥胖老妇做爰| 欧美电影免费观看高清完整版在线观看 | 国产亚洲成年网址在线观看| 国产亚洲精品精华液| 亚洲天堂2014| 亚洲一卡二卡三卡四卡| 日本中文一区二区三区| 精品一区二区国语对白| 国产jizzjizz一区二区| 色综合视频一区二区三区高清| 日本乱人伦一区| 日韩免费高清视频| 中文字幕精品一区二区精品绿巨人| 日韩理论片在线| 日韩av不卡在线观看| 国产一区二区不卡| 91蜜桃视频在线| 欧美一区二区三区视频免费| 久久色在线观看| 亚洲一区二区三区在线| 久久精品国产一区二区| 成人免费看黄yyy456| 精品视频在线看| 国产人伦精品一区二区| 亚洲国产wwwccc36天堂| 国产乱码精品一区二区三区五月婷| 波波电影院一区二区三区| 91精品国产一区二区三区 | eeuss鲁片一区二区三区| 欧美伊人久久久久久久久影院| 欧美刺激脚交jootjob| 亚洲人成伊人成综合网小说| 麻豆精品一区二区三区| 色香蕉久久蜜桃| 久久午夜国产精品| 亚洲第一在线综合网站| 成人黄色777网| 欧美成人三级在线| 亚洲伊人伊色伊影伊综合网 | 久久国产成人午夜av影院| 91麻豆.com| 国产日韩精品视频一区| 日本伊人色综合网| 在线一区二区三区做爰视频网站| 日韩精品一区二区在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产久卡久卡久卡久卡视频精品| 欧美日韩国产高清一区二区| 国产精品麻豆欧美日韩ww| 国产资源精品在线观看| 91精品在线观看入口| 一区二区三区丝袜| 不卡的av网站| 中文字幕欧美国产| 韩国成人精品a∨在线观看| 51精品秘密在线观看| 亚洲福利一区二区三区| 日本韩国欧美在线| 国产精品美日韩| 国产成人高清视频| 久久蜜桃av一区二区天堂| 美女在线一区二区| 欧美日韩成人一区| 午夜久久久久久| 欧美三级日韩三级| 亚洲bt欧美bt精品777| 在线观看日韩高清av| 亚洲第一综合色| 91精品国模一区二区三区| 日韩av午夜在线观看|