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.
Figure 1: Parallel dataflow constructed in CSC543s24NonBlockingDataflowAssn3.java