TASK 2 Overview(Unified Message Passing Benchmarking)
This report presents results from a study of the communication performance measured when transferring data between two Indigo 2 Silicon graphics workstations using the Unified Message Passing (UMP) application program interface, the TCP/IP and UDP/IP internet transport protocols, and the fiber channel hardware. Test code utilizing the UMP interface was developed to send messages over the UMP/Fiber channel network.
There were two approaches taken to measure the performance. The first approach created a variable number of processes which transmitted and received messages over the network. The results were represented graphically by displaying the number of active processes versus the number of transactions per second. The second approach, a more traditional approach, varied the size of the message to be transmitted. The results of this method were represented graphically by displaying the message size versus the throughput.
UMP supports the UDP (User Datagram Protocol) and TCP (Transmission Control Protocol) Internet transport protocols.

The "send.c" and "recv.c" programs were written to measure the performance of the UMP/Fiber Channel network when a variable number of processes was used simultaneously to send and receive fixed size messages over the network. These two programs provided measurements using the TCP/IP and UDP/IP transport protocols. Peer-to-peer connections were established between the processes on the workstations when using the TCP/IP protocol. The broadcast flag was set and each process on the transmitting workstation sent a broadcast message to processes on the receiving workstations when using the UDP/IP protocol.
The "send_msg.c" and "recv_msg.c" programs were written to measure the performance of the UMP/Fiber Channel network when sending variable length messages across the network. These programs provided measurements using the TCP/IP transport protocol. Similarly to the "send.c" and "recv.c" programs, a peer-to-peer connection was established.
The "time_functs.h" and "time_functs.c" programs supplied three timing functions, "start_time()", "stop_time()", and "time_taken()". The "start_time()" function records the times returned by the "gettimeofday()" function and places them in the "begin" elements of the time_kept structure. The "stop_time()" function records the times returned by the "gettimeofday()" function and places them in the "end" elements of the time_kept structure. The "time_taken()" function calculates the difference in the "end" and "begin" elements of the time_kept structure and stores the value in the "total time" element of the time_kept structure. These functions were utilized by the send.c/recv.c and send_msg.c/recv_msg.c pairs to calculate the transaction times.
UNIX shell scripts were written to execute the above programs in series. For example, in the case of the send.c/recv.c pair the scripts ran the programs starting with 10 processes and incrementing by 10 each time. In the case of the send_msg.c/recv_msg.c pair the scripts ran the programs starting with a message size of 1024 bytes and doubling this value each time.