CSC 543 - Multiprocessing & Concurrent Programming, Spring 2024, Assignment 3 on using non-blocking queues and atomics a pipeline.

Assignment 3 due by 11:59 PM on Thursday March 28 via make turnitin

See an example doc on using control-\ to see stack traces for a hung Java process on 2/6.
 

cd $HOME                  # places you into your login directory
mkdir multip              # all of your csc543 projects go into this directory
cd  ./multip                 # makes multip your current working directory
cp  ~parson/multip/CSC543s24NonBlockingDataflowAssn3.problem.zip  CSC543s24NonBlockingDataflowAssn3.problem.zip
unzip  CSC543s24NonBlockingDataflowAssn3.problem.zip    # unzips your working copy of the project directory
cd  ./CSC543s24NonBlockingDataflowAssn3                            # your project working directory

Perform all test execution on mcgonagall to avoid any platform-dependent output differences.
Here are the files of interest in this project directory. These are listed in order of STUDENT worklets.

NonBlockingQueue.java                             # Implements interface INonBlockingTupleExchange using a non-blocking Queue.
                                                                    # Note some of the BlockingQueue classes in java.util.concurrent
                                                                    # also support non-blocking insertion and removal of data objects.
NonBlockingAtomicReference.java           
# Implements interface INonBlockingTupleExchange using an AtomicReference.
NonBlockingAtomicReferenceArray.java   # Implements interface INonBlockingTupleExchange using an AtomicReferenceArray.
DistributionGenerator.java                          # 1st stage active class that invokes one of the Make* generators above.
StatisticalAnalysisGenerator.java               # 2nd stage active class that analyzes / reduces stage 1's output.
StatisticalAnalysisCSVSaver.java              # 3rd stage in pipeline writes entries to a CSV file for diffing.
CSC543s24NonBlockingDataflowAssn3.java # The main() driver with code replacement for the join() loop.
runtest.sh                                                               # Test driver shell script, your STUDENT 8 is in here.
    8a. Step is adding Queue classes to the test driver for loop again. They may differ from Assignment 2.
    8b. Requires reasons for the Queue classes that do not work. Explain WHY.
jcip-annotations.jar                                                 # Annotations for the textbook denote design intent.

You will make no changes to these updated files:

jcip-annotations.jar                                     # Annotations for the textbook denote design intent.
INonBlockingTupleExchange.java             # Interface specification for your first three classes above.
IMakeDistribution.java                               # Interface specification for the enxt three Make* files.
MakeUniform.java                                      # The three Make* classes makes a uniform, normal, & exponential                            
MakeNormal.java                                       # distribution respectively of pseudo-random numbers.  They require
MakeExponential.java                                # added field modifiers to make them thread-safe + some annotations.
TenTuple.java                                             # A simple, immutable data container.
FiveTuple.java                                            # Slightly more complicated immutable data container.
Stats.java                                                    # Statistics and CSV writer functions.

ELAPSED.ref                                              # Extracted run times after completion,
                                                                    #    _0 means
CSC543s24NonBlockingDataflowAssn3.java
                                                                    # _1 means
CSC543s24VeryParallelDataflowAssn2.java
We will discuss other .ref files in class.

Run make clean test for your final test and then make turnitin as before by the due date.
Late penalty is 10% per day after the deadline and no points after I go over the solution next class.
Make sure to edit the STUDENT requirements in runtest.sh. Below is the updated dataflow for AZssignment 3.


CSC523f23DataflowSpring2024Assn3-01.jpg
Figure 1: Parallel dataflow constructed in
CSC543s24NonBlockingDataflowAssn3.java