Write a program to measure the time it takes to send 1, 2, 4, ..., 1M copies of various MPI C datatypes (such as MPI_DOUBLE, MPI_CHAR, and MPI_INT) from one processor to another using MPI_Send and MPI_Recv. Use the same techniques as in the memcpy assignment to average out variations and overhead in MPI_Wtime. As in the unaligned memcpy tests, make the send and receive buffers different and well separated in memory. Make them unaligned relative to each other, but preserve the usual alignment rules that a object (probably) must start on an address that is an integral multiple of its size.

Print the size, time, and rate in MB/sec for each test.

Make sure that both sender and reciever are ready when you begin the test. The sample solution uses MPI_Sendrecv, but other choices are possible.