EE 360P Vijay Garg Spring 2016
Term Paper Topics
As part of EE 360P, you are required to do a term project and submit
a term paper based on the project. The term project should be done in
groups of four.
It is your responsibility to form teams.
It is expected that all team members will make equal effort
in completion of the project. The entire team will get a single
grade on the term paper.
All projects need to be implemented using Java. Any package developed
should be thread-safe. All the documents and source code developed for the term
project should be uploaded to github.
The term paper will be due on April 28.
It should be approximately 4 pages (excluding references), typed and double spaced.
The paper should have an abstract, introduction, description of the project,
various design alternatives considered during implmentation, performance results
and conclusions. You must acknowledge any software that you download and use for your project.
The paper should clearly identify which portions of your software project have been written
by you (or modified by you).
Every team is required to make a presentation of their project. Each team will
get eight minutes to make their presentation (including questions).
Each team member must present and will get about 2 minutes for presentation.
The presentation must include a short demo of the project.
The class presentations will begin on April 26th.
Please submit the names of
the team members and the first three choices of the term project
by April 5th .
- Monitors with Implicit Signals
Develop a new type of Monitor lock that uses implicit signals. Every time
a thread leaves the monitor (by unlock or await), it determines if there is any
thread that should be signaled. Implement and evaluate different strategies:
such as one that signals all threads, or one that signals one thread for each condition variable.
Solve some synchronization problems using implicit monitors
and compare the performance with standard monitors with explicit signals.
A good source of synchronization problems is
the little book of semaphores
- Monitors with Aborts
Develop a new type of Monitor lock that enables user
to have an additional command called {\em abort}.
Whenever abort is issued, the state of the object is restored to
the point at which this thread acquired the lock for that object.
One strategy is to make a copy of the object before any abortable
method is called. You would need to make a deep copy of the object.
- Concurrent Data Structures: Lists, trees, skip lists, heaps
Implement two fine-grained or lock-free data structures such as linked list and priority
queues. Compare the performance of your data structure with that provided by Java Library.
- Concurrent/Distributed Apps for iPhone/Android
Develop distributed applications for Android/iPhone. Here are some suggestions:
(i) Global scheduling: A set of friends download the app. They use the
app to determine first available meeting time.
(ii) Chatroom (iii) Lunch invite (iv) survey (v) multiplayer games.
(vi) an app that keeps useful information about the department. For example, it
may allow an user to check seminars on any given day or to reserve a computer workstation.
(vii) an app for multiplayer game
- Parallel programming with GPGPU
Compare implementation, ease and performance of some applications on
general purpose CPU versus GPGPU. Some examples are
matrix multiplication, matrix inversion, and encryption/decryption.
- Global Snapshot Algorithms
Implement scalable algorithms for global snapshot
as proposed here
- Visual Dashboard
Since debugging distributed programs is hard,
design and implement a visual dashboard to launch and control
distributed programs. All processes run as threads in the same JVM and
messages are communicated via shared queues. To debug, the programmer has
access to these queues to change the order of messages or to delete certain messages.
- Internet Computing
The goal of these projects is to learn internet computing. The goal is to
develop a useful website based on available packages such as
JSP, PHP, Javascript, Ajax, MySQL, Node.js etc.
I am providing some examples of websites that you can build
but you are free to propose any other idea to me as well.
- MyLife.com: This website keeps photos, likes/dislikes (as in facebook) with the
difference that the data is kept only on the user's machine. The user has
ability to change/remove the data. The goal is to ensure that the user has
complete control on his/her data. The page stored at the server of MyLife.com
can only store pointers to the data stored at the user's site.
- GroupBackup.com: This website allows users to keep backup of their files
on other peoples's disks. By using simple coding such as exclusive-or, the
storage requirements or privacy requirements are met.
-
TennisAnyone.com: This website allows user to register and find partners
for a tennis game.
-
ProjectMatch.com: This website allows students to find partners
for EE 360P term project.
- Spanning Tree
Implement the distributed minimum spanning tree algorithm by Gallaghar, Humblet and Spira.
click here
- P2P Systems
Implement Chord algorithm for storing Key-Value pairs in a distributed system.
See Chord
- Promela Models for Distributed Programs
Specify and verify the correctness of at least four
different distributed algorithms
using Promela language and the SPIN model checker.
The information is available
here .
- PlusCal for Multithreaded Programs
Specify and verify the correctness of Peterson's, Dekker's and
Lamport's Fast Mutex algorithms using PlusCal.
The information is available here.
http://research.microsoft.com/en-us/um/people/lamport/tla/pluscal.html .
- Using Spark for Distributed Processing
Hadoop requires multiple disk copies for processing intermediate key-value pairs esp. when
multiple iterations on data is required.
Spark speeds up distributed computation by doing more in-memory processing (and thus
reducing disk accesses).
It is based around a datastructure called Resilient Distributed Dataset (RDD).
Implement the context word search program (Assignment 4) using Spark and compare the performance with Hadoop.
Information on Spark is
available here.
http://spark.apache.org/
- Using ZooKeeper for Distributed Coordination
ZooKeeper provides coordination services that can be used to build distributed applications.
Build a fault-tolerant server (Assignment 5) using ZooKeeper.
Information on ZooKeeper is available at
http://zookeeper.apache.org/
- Using Paxos for Replicated State Machine
Implement Paxos protocol to build a fault-tolerant server (Assignment 5) that
can tolerate crash faults in asynchronous systems.
Information on Paxos is available at
http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf
- Using Raft for Replicated State Machine
Implement Raft protocol to build a fault-tolerant server (Assignment 5) that
can tolerate crash faults in asynchronous systems.
Information on Raft is available at
https://raft.github.io/