X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c81c99a491282f76757c2673961e3cdee6853539..b7dc075d2c3bdf2b384cb8897d16a4c0aa8ab0f7:/teshsuite/smpi/mpich-test/pt2pt/bsendtest.c diff --git a/teshsuite/smpi/mpich-test/pt2pt/bsendtest.c b/teshsuite/smpi/mpich-test/pt2pt/bsendtest.c deleted file mode 100644 index afd2eefe63..0000000000 --- a/teshsuite/smpi/mpich-test/pt2pt/bsendtest.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Program to test that the "no overtaking messages" semantics - * of point to point communications in MPI is satisfied. - * A long message is sent using MPI_BSend and received using MPI_Recv, - * followed by lots of short messages sent the same way. - * - * Patrick Bridges - * bridges@mcs.anl.gov - * patrick@CS.MsState.Edu - */ - -#include -/* Needed for malloc declaration */ -#include -#include "test.h" -#include "mpi.h" - -#define SIZE 10000 - -static int src = 0; -static int dest = 1; - -/* Which tests to perform (not yet implemented) */ -/* static int Do_Buffer = 1; */ -/* static int Do_Standard = 1; */ - -/* Prototypes for picky compilers */ -void Generate_Data ( double *, int ); -void Normal_Test_Recv ( double *, int ); -void Buffered_Test_Send ( double *, int ); -void Buffered_Test_Ibsend ( double *, int ); -int Check_Data ( double *, int ); -void Clear_Buffer ( double *, int ); - -void Generate_Data(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i; - - for (i = 0; i < buff_size; i++) - buffer[i] = (double)i+1; -} - -void Normal_Test_Recv(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i, j; - MPI_Status Stat; - double *b; - - b = buffer; - for (j = 0; j < 2; j++) { - /* Receive a long message */ - MPI_Recv(b, (buff_size/2 - 10), MPI_DOUBLE, src, - 2000, MPI_COMM_WORLD, &Stat); - b += buff_size/2 - 10; - /* Followed by 10 short ones */ - for (i = 0; i < 10; i++) { - MPI_Recv(b++, 1, MPI_DOUBLE, src, 2000, MPI_COMM_WORLD, &Stat); - } - } -} - -void Buffered_Test_Send(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i, j; - void *bbuffer; - int size; - - for (j = 0; j < 2; j++) { - /* send a long message */ - MPI_Bsend(buffer, (buff_size/2 - 10), MPI_DOUBLE, dest, 2000, - MPI_COMM_WORLD); - buffer += buff_size/2 - 10; - /* Followed by 10 short ones */ - for (i = 0; i < 10; i++) - MPI_Bsend(buffer++, 1, MPI_DOUBLE, - dest, 2000, MPI_COMM_WORLD); - /* Force this set of Bsends to complete */ - MPI_Buffer_detach( &bbuffer, &size ); - MPI_Buffer_attach( bbuffer, size ); - } -} - -void Buffered_Test_Ibsend(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i, j; - void *bbuffer; - int size; - int cnt; - MPI_Request req[20]; - MPI_Status statuses[20]; - - for (j = 0; j < 2; j++) { - /* send a long message */ - cnt = 0; - MPI_Ibsend(buffer, (buff_size/2 - 10), MPI_DOUBLE, dest, 2000, - MPI_COMM_WORLD, &req[cnt++]); - buffer += buff_size/2 - 10; - /* Followed by 10 short ones */ - for (i = 0; i < 10; i++) - MPI_Ibsend(buffer++, 1, MPI_DOUBLE, - dest, 2000, MPI_COMM_WORLD, &req[cnt++]); - /* Wait for these to finish (should finish immediately) */ - MPI_Waitall( cnt, req, statuses ); - - /* Force this set of Bsends to complete; this may take longer than - the Waitall */ - MPI_Buffer_detach( &bbuffer, &size ); - MPI_Buffer_attach( bbuffer, size ); - } -} - -int Check_Data(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i; - int err = 0; - - for (i = 0; i < buff_size; i++) - if (buffer[i] != (i + 1)) { - err++; - fprintf( stderr, "Value at %d is %f, should be %f\n", i, - buffer[i], (double)(i+1) ); - if (err > 10) return 1; - } - return err; -} - -void Clear_Buffer(buffer, buff_size) -double *buffer; -int buff_size; -{ - int i; - for (i = 0; i < buff_size; i++) - buffer[i] = -1; -} - - -int main(int argc, char **argv) -{ - int rank; /* My Rank (0 or 1) */ - double buffer[SIZE], *tmpbuffer, *tmpbuf; - int tsize, bsize; - char *Current_Test = NULL; - - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - if (rank == src) { - Generate_Data(buffer, SIZE); - MPI_Pack_size( SIZE, MPI_DOUBLE, MPI_COMM_WORLD, &bsize ); - tmpbuffer = (double *) malloc( bsize + 22*MPI_BSEND_OVERHEAD ); - if (!tmpbuffer) { - fprintf( stderr, "Could not allocate bsend buffer of size %d\n", - bsize ); - MPI_Abort( MPI_COMM_WORLD, 1 ); - } - MPI_Buffer_attach( tmpbuffer, bsize + 22*MPI_BSEND_OVERHEAD ); - Buffered_Test_Send(buffer, SIZE); - Buffered_Test_Ibsend(buffer, SIZE); - MPI_Buffer_detach( &tmpbuf, &tsize ); - Test_Waitforall( ); - MPI_Finalize(); - - } else if (rank == dest) { - Test_Init("bsendtest", rank); - /* Test 3 */ - Current_Test = (char*)"Overtaking Test (Buffered Send -> Normal Receive)"; - Clear_Buffer(buffer, SIZE); - /* For Bsend */ - Normal_Test_Recv(buffer, SIZE); - if (Check_Data(buffer, SIZE)) - Test_Failed(Current_Test); - else - Test_Passed(Current_Test); - - /* For Ibsend */ - Current_Test = (char*)"Overtaking Test (Buffered Isend -> Normal Receive)"; - Clear_Buffer(buffer, SIZE); - Normal_Test_Recv(buffer, SIZE); - if (Check_Data(buffer, SIZE)) - Test_Failed(Current_Test); - else - Test_Passed(Current_Test); - - Test_Waitforall( ); - { - int rval = Summarize_Test_Results(); /* Returns number of tests; - that failed */ - Test_Finalize(); - MPI_Finalize(); - return rval; - } - } else { - fprintf(stderr, "*** This program uses exactly 2 processes! ***\n"); - MPI_Abort( MPI_COMM_WORLD, 1 ); - } - - return 0; -} - - -