#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"

int main( argc, argv )
int argc;
char **argv;
{
    double t1, t2;
    double tmin;
    int    size, *in_data, *out_data;
    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 = (int *)malloc( size * sizeof(int) );
	out_data = (int *)malloc( size * sizeof(int) );
	if (!in_data || !out_data) {
	    fprintf( stderr, "Failed to allocate space for %d ints\n", size );
	    break;
	}
	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_data, in_data, 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;
}