A Comparison of C++ Sockets and Corba in a Distributed Matrix Multiply Application

This project has two primary purposes. The first, is to implement a distributed matrix multiply algorithm using C++ sockets, and Corba objects with the objective of discovering what additional overhead, if any, exists in a Corba implementation. Secondly, attempt to improve the speedup through the use of stateful servers in the C++ implementation. CONCEPTS: Buffer Deadlock Buffer Size Limitations Client-Server Architecture C++ Sockets CORBA Unix Name Service CORBA Name Service Speedup Efficiency Superscalar Efficiency Technical Report # NPSCS-98-001 Alpay Duman and Matt Schnaidt 6 SUMMARY Matt Schnaidt did the C++ Socket implementation of the matrix multiply. This included writing all of the C++ code (a 2d Array Class, the client and server code for the matrix multiply, and a name server), testing, debugging, and making record runs. I did this in three phases. In phase 1, I implemented a simple matrix multiply using UDP sockets; I used this to debug the multiply algorithm, and the interaction with the name server (which I called memberServer). In phase 2, I converted the client and server to using TCP sockets so that they could reliably transmit messages which exceeded the maximum packet size without concern for ordering, lost or duplicate packets. I finished phase 2 by measuring the time it took to do matrix multiplies with a varied number of servers and varied size matrices. In phase 3, I changed the server so that it remembers it state to cut down on message traffic time. I finished phase 3 by measuring the time it took to matrix multiplies, again with a varied number of servers and varied size matrices. Alpay and I divided the report writing, and slide development for the presentation equally. Alpay Duman did the CORBA implementation of the matrix multiply. This included writing the IDL, the client code and the interface object implementation defined in the IDL file, testing, debugging and making record runs. I did this in three phases. In phase one, I implemented the IDL file and the object implementation for this definition. For passing the array I used type sequence in Interface Definition Language, which is a linear dynamic container. In phase two, I implemented the client invoking the object implementation by using deferred synchronous method, which is a non-blocking dynamic remote procedure call method. In phase three, I used a special function for CORBA send_multiple_requests_deferred(), which initiates a number of requests in parallel. It does not wait for the requests to finish before returning to the caller. Technical Report # NPSCS-98-001 Alpay Duman and Matt Schnaidt 7 Table of