⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendflood.c

📁 fortran并行计算包
💻 C
字号:
#include "stdlib.h"#include "stdio.h"#include "mpi.h"/* * Run this test with 8 processes.  This test was submitted by xxx * as a result of problems seen with the ch3:shm device on a Solaris  * system.  The symptom is that the test hangs; this is due to losing  * a message, probably due to a race condition in a message-queue update. * As a test for race conditions, it may need to be run multiple times * to expose a problem if a problem does exist. */#define LOOP_COUNT  100000#define DATA_SIZE   4#define MP_TAG      999#define PROGRESS_COUNT 0xfffstatic int verbose = 0;static int loopProgress = 0;int main( int argc, char *argv[] ){    int     nProc, rank ;    int     i, j, status ;    FILE    *pf=0 ;    MPI_Init( &argc, &argv ) ;    MPI_Comm_size( MPI_COMM_WORLD, &nProc ) ;    MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ;    for (i=1; i<argc; i++) {	if (strcmp(argv[i],"-v") == 0 ||	    strcmp(argv[i],"--verbose") == 0) verbose = 1;	else if (strcmp(argv[i],"-p") == 0 ||		 strcmp(argv[i],"--progress") == 0) loopProgress = 1;	else {	    if (rank == 0) {		fprintf( stderr, "%s: [ -v | --verbose ] [ -p | --progress ]\n",			 argv[0] );		fflush(stderr);	    }	}    }    if (verbose) {	char    buf[ 128 ] ;	sprintf( buf, "fast_mpi_%d.dmp", rank ) ;	pf = fopen( buf, "w" ) ;    }    else if (loopProgress) {	pf = stdout;    }    if( !rank ) {       int      **psend ;       int      **precv ;       psend = (int**)calloc( nProc, sizeof( int *) ) ;       precv = (int**)calloc( nProc, sizeof( int *) ) ;       for( i = 0 ; i < nProc ; i++ ) {           psend[ i ] = (int*)calloc( DATA_SIZE, sizeof( int ) ) ;           precv[ i ] = (int*)calloc( DATA_SIZE, sizeof( int ) ) ;       }       for( i = 0 ; i < LOOP_COUNT ; i++ ) {	   if (verbose) {	       fprintf( pf, "Master : loop %d\n", i ) ;	       fflush( pf ) ;	   }	   else if (loopProgress && (i & PROGRESS_COUNT) == 0) {	     fprintf( pf, "Master: loop %d\n", i ); fflush( pf );	   }          for( j = 1 ; j < nProc ; j++ ) {	      if (verbose) {		  fprintf( pf, "  read from child %d\n", j ) ;		  fflush( pf ) ;	      }             status = MPI_Recv( precv[ j ], DATA_SIZE, MPI_LONG, j, MP_TAG,				MPI_COMM_WORLD, MPI_STATUS_IGNORE ) ;	     if (verbose) {		 fprintf( pf, "  read from child %d done, status = %d\n", j,			  status ) ;		 fflush( pf ) ;	     }          }          for( j = 1 ; j < nProc ; j++ ) {	      if (verbose) {		  fprintf( pf, "  send to child %d\n", j ) ;		  fflush( pf ) ;	      }             status = MPI_Send( psend[ j ], DATA_SIZE - 1, MPI_LONG, j,				MP_TAG, MPI_COMM_WORLD ) ;	     if (verbose) {		 fprintf( pf, "  send to child %d done, status = %d\n", j,			  status ) ;		 fflush( pf ) ;	     }          }       }       for( i = 0 ; i < nProc ; i++ ) {	   free( psend[ i ] );	   free( precv[ i ] );       }       free( psend );       free( precv );    } else {       int  *psend ;       int  *precv ;       psend = (int*)calloc( DATA_SIZE, sizeof( int ) ) ;       precv = (int*)calloc( DATA_SIZE, sizeof( int ) ) ;       for( i = 0 ; i < LOOP_COUNT ; i++ ) {	   if (verbose) {	       fprintf( pf, "  send to master\n" ) ;	       fflush( pf ) ;	   }	   /*	   else if (loopProgress && (i & PROGRESS_COUNT) == 0) {	     fprintf( pf, "Slave: loop %d\n", i ); fflush( pf );	   }	   */	   status = MPI_Send( psend, DATA_SIZE - 1, MPI_LONG, 0, MP_TAG,			      MPI_COMM_WORLD ) ;	   if (verbose) {	       fprintf( pf, "  send to master done, status = %d\n", status ) ;	       fflush( pf ) ;	       fprintf( pf, "  read from master\n" ) ;	       fflush( pf ) ;	   }	   status = MPI_Recv( precv, DATA_SIZE, MPI_LONG, 0, MP_TAG,			      MPI_COMM_WORLD, MPI_STATUS_IGNORE ) ;	   if (verbose) {	       fprintf( pf, "  read from master done, status = %d\n", status ) ;	       fflush( pf ) ;	   }       }       free( psend );       free( precv );    }    if (verbose) {	fclose( pf ) ;    }    MPI_Finalize() ;    /* This test fails if it hangs */    if (rank == 0) {	printf( " No Errors\n" );    }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -