#include <stdio.h> #include <stdlib.h> #include "mpi.h" #define PAD 4096 int main( argc, argv ) int argc; char **argv; { double t1, t2; double tmin; int size; char *in_data, *out_data; char *in_p, *out_p; int j, nloop, k; MPI_Init( &argc, &argv ); printf( "Size (bytes) Time (sec)\tRate (MB/sec)\n" ); for (size = 1; size < 1000000; size *= 2 ) { in_data = in_p = (char *)malloc( size * sizeof(int) + PAD ); out_data = out_p = (char *)malloc( size * sizeof(int) + PAD ); if (!in_data || !out_data) { fprintf( stderr, "Failed to allocate space for %d ints\n", size ); break; } /* make out_p, in_p unaligned */ out_p += 7; in_p += 10; if ((((long)out_p) & 0x3) == (((long)in_p) & 0x3)) { out_p += 3; } tmin = 1000.0; nloop = 100000/size; if (nloop == 0) nloop = 1; for (k=0; k < 10; k++) { t1 = MPI_Wtime(); for (j=0; j<nloop; j++) memcpy( out_p, in_p, size * sizeof(int) ); t2 = (MPI_Wtime() - t1) / nloop; if (t2 < tmin) tmin = t2; } printf( "%d\t%f\t%f\n", size * sizeof(int), tmin, 1.0e-6*size*sizeof(int)/tmin ); free( in_data ); free( out_data ); } MPI_Finalize( ); return 0; }