diff --git a/cs658/html/class-diagram.png b/cs658/html/class-diagram.png index 7fd7640..b39f195 100644 Binary files a/cs658/html/class-diagram.png and b/cs658/html/class-diagram.png differ diff --git a/cs658/html/design.html b/cs658/html/design.html index 1ef4509..bb53f83 100644 --- a/cs658/html/design.html +++ b/cs658/html/design.html @@ -69,7 +69,7 @@ Some of these options can be specified on the command line and others can be specified in the scene description file. When a given option can be specified both places, - the command-line options will override what is in the scene file. + the command-line options will override what is in the scene file.

  • Distribution
  • @@ -134,9 +134,39 @@ of the worker nodes going down and still produce the final image.

    + +

    + Update: + To implement this distributed algorithm, I thought about using + the MPI framework. + MPI, however, was not natively designed to handle fault tolerance. + So, I decided to implement the distributed framework with raw + TCP sockets. + This solution is very portable because it only relies on + TCP socket availability and not a third-party library. +

    +

    + At first TCP was not sending the message data fast enough + for my program. + I considered switching to UDP but instead turned on the + socket option TCP_NODELAY which disables the "Nagle" buffering + algorithm and sends the data as soon as it is available. + This made using TCP feasible and my CPU utilization grew. +

    +

    + The application-level protocol is very simple. + It was designed to transmit short messages across the wire. + An integer representing the message type is transmitted, + followed by the payload of the message. + Task identifiers are sent using a single 4-byte integer. + Bitmap data is transmitted as packed data, 3 bytes per pixel. +

    +
    +
  • Program Organization
  • - The follows the object-oriented design paradigm. + The program follows the object-oriented design paradigm. + It is written in C++ so that it is portable and efficient. It is made up of a collection of modules, which are organized into functional groupings. Each module implements one or more classes of objects for the system.