| ²é¿´: 862 | »Ø¸´: 0 | |||
_ÁúÆé_гæ (³õÈëÎÄ̳)
|
[½»Á÷]
MPI²¢ÐÐÇó½âһά²´ËÉ·½³Ì£¬sendrecvº¯ÊýÓÐÎÊÌ⣬´úÂëÈçÏ£¬Ï£Íû´ó¼Ò°ï°ïæ
|
|
//һά²´ËÉ·½³Ì u(x)=x^3,cpuΪËÄºË #include "stdio.h" #include "math.h" #define MPICH_SKIP_MPICXX //ûÓÐÕâ¾ä¾Í»á³öÏÖoverriding virtual function differs from 'MPI::µÄ±àÒë´íÎó #include "mpi.h"//½«º¯Êý¿â°üº¬½øÀ´ #include <stdio.h> #pragma comment (lib, "mpi.lib" //ûÓÐÕâ¾ä¾Í»á³öÏÖunresolved external symbol _MPI_FinalizeµÄÁ¬½Ó´íÎó¡£double f(double x) {double y; y=6*x; return y; } int main( int argc, char *argv[]) { double l=1;//³¤¶È double w=0,e=1;//×óÓұ߽çÌõ¼þ int num=4;//½ø³ÌÊý int n=5;//Íø¸ñÊý double dd=l/n/num;//Íø¸ñ´óС double u[7],u0[7]; double eps=0; int i,j; int myid, numprocs, namelen;//¶¨Òå½ø³ÌºÅ¡¢½ø³ÌÊý¡¢½ø³ÌÃû double startwtime, endwtime;//¶¨ÒåÆðֹʱ¼ä£¬ÎªÁ˼ÆËãЧÂÊ char processor_name[MPI_MAX_PROCESSOR_NAME];//Óýø³ÌÃû×µÄ×÷Ϊ³¤¶È MPI_Init(&argc,&argv);//³õʼ»¯Óï¾ä£¬Ã¿¸ö³ÌÐò¶¼Ò»Ä£Ò»Ñù MPI_Status status; MPI_Datatype onerow; startwtime = MPI_Wtime();//µÃµ½¿ªÊ¼Ê±¼ä MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//µÃµ½½ø³ÌÊý MPI_Comm_rank(MPI_COMM_WORLD,&myid);//µÃµ½½ø³ÌºÅ MPI_Get_processor_name(processor_name,&namelen);//µÃµ½½ø³ÌÃû£¬Æäʵ½ø³ÌÃû²»ÊDZØÐëµÄ MPI_Type_contiguous(1,MPI_DOUBLE,&onerow); MPI_Type_commit( &onerow ); for(j=0;j<n+2;j++){ u[j]=0; u[0]=0; u[n+1]=1;}//³õʼ»¯ te: eps=0; for(j=1;j<n+1;j++){ u0[j]=u[j];} //for(j=0;j<n+2;j++){ //u0[j]=pow(((j-0.5)*dd+myid*n*dd),3); //u0[j]=u[j];} int up=myid-1; if (up<0) {up=MPI_PROC_NULL;} int down=myid+1; if (down>1){ down=MPI_PROC_NULL;} //if(myid<3&&myid>0) { //MPI_Send(&u[1],1,MPI_DOUBLE,myid+1,1000,MPI_COMM_WORLD); ///MPI_Recv(&u[n+1],1,MPI_DOUBLE,myid,1000,MPI_COMM_WORLD,&status); //MPI_Send(&u[n],1,MPI_DOUBLE,myid-1,1000,MPI_COMM_WORLD); //MPI_Recv(&u[0],1,MPI_DOUBLE,myid,1000,MPI_COMM_WORLD,&status);} //if (myid>0) {} if(myid>0&&myid<3){ MPI_Sendrecv(&u[1],1,onerow,down,1000,&u[n+1],1,onerow,myid,1000,MPI_COMM_WORLD,&status);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MPI_Sendrecv(&u[n],1,onerow,up,1000,&u[0],1,myid,up,1000,MPI_COMM_WORLD,&status);}//!!!!!!!!!!!!!!!!!!!!!!!!!!!!! for(i=1;i<=n;i++) { double t=(i-0.5)*dd+myid*n*dd; if(i==1){ u=(u[i+1]+2*u[0]-f(t)*dd*dd)/3.0; continue;} if(i==(n)){ u=(2*u[n+1]+u[i-1]-f(t)*dd*dd)/3.0; continue;} u=(u[i-1]+u[i+1]-f(t)*dd*dd)/2; } //if(myid<num-1){u[myid][n+1]=/*u[myid+1][0];}*/(u[myid+1][1]+u[myid][n]-f((myid+1)*n*dd)*dd*dd)/2; //u[myid+1][0]=u[myid][n+1];} //if(myid>0){u[myid][0]=/*u[myid-1][n+1];}*/(u[myid][1]+u[myid-1][n+1]-f(myid*n*dd)*dd*dd)/2; //u[myid-1][n+1]=u[myid][0];} for(j=1;j<n+1;j++){ eps=eps+fabs(u0[j]-u[j]);} if(eps>0.1){goto te;} endwtime = MPI_Wtime();//µÃµ½ÖÕֹʱ¼ä printf("wall clock time = %f\n", endwtime-startwtime);//µÃµ½Ç½ÉÏʱ¼ä MPI_Type_free( &onerow ); MPI_Finalize();//¹Ø±ÕMPI for(j=1;j<n+1;j++){ printf("u[%d]=%f\n",j,u[j]);} return 0; } |
» ²ÂÄãϲ»¶
»¶Ó¼ÓÈë¿ÎÌâ×é
ÒѾÓÐ0È˻ظ´
É¢½ð±Ò£¬ÇóºÃÔË£¬×£ÃæÉÏ˳Àû£¡
ÒѾÓÐ80È˻ظ´
ÎïÀíѧIÂÛÎÄÈóÉ«/·ÒëÔõôÊÕ·Ñ?
ÒѾÓÐ70È˻ظ´
»ª¶«Ê¦·¶´óѧоƬÉè¼ÆÐìççÕæÊµË®Æ½Õ¦Ñù
ÒѾÓÐ1È˻ظ´
µ÷¼Á
ÒѾÓÐ0È˻ظ´
¡¾ÐÂ¼ÓÆÂ¡¿ÄÉÃ×µç×ÓÆ÷¼þÏîÄ¿×éÓС°ÁªºÏÅàÑø²©Ê¿Éú¡±Ãû¶î
ÒѾÓÐ0È˻ظ´
Öе²©Ê¿ºó2026ÏîÄ¿5ÔÂ30ÈÕ½ØÖ¹- ¹úÄÚ²©Ê¿ºóÈëÕ¾¡¢µÂ¹úÁ½Äêȫְ
ÒѾÓÐ0È˻ظ´
ÃæÏòÈ«ÇòÉêÇëÈ˵ÄÖе²©Ê¿ºó2026ÏîÄ¿5ÔÂ30ÈÕ½ØÖ¹- ¹úÄÚ²©ºóÈëÕ¾µÂ¹úÁ½Äêȫְ
ÒѾÓÐ0È˻ظ´
¡¾ÐÂ¼ÓÆÂ¡¿ÄÉÃ×µç×ÓÆ÷¼þÏîÄ¿×éÓС°ÁªºÏÅàÑø²©Ê¿Éú¡±Ãû¶î
ÒѾÓÐ2È˻ظ´
ÖØÇì½»´ó²ÄÁÏѧԺ26Äê˶ʿÕÐÉú¸´ÊÔʵʩϸÔòÒѳö¡£»¶Ó¼ÓÈë¹â×Óѧ΢½á¹¹ÓëÆ÷¼þ¿ÎÌâ×é¡£
ÒѾÓÐ0È˻ظ´
±±¹¤´óËÎÏþÑÞ½ÌÊÚÍŶÓÕÐÊÕ2026Äê9ÔÂÈëѧ²©Ê¿¡¾Ñ§²©ºÍר²©Ãû¶î¾ùÓС¿£¡
ÒѾÓÐ1È˻ظ´













//ûÓÐÕâ¾ä¾Í»á³öÏÖunresolved external symbol _MPI_FinalizeµÄÁ¬½Ó´íÎó¡£
»Ø¸´´ËÂ¥
40