#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;
}

