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 .

  1. 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
  2. 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.
  3. 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.
  4. 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
  5. 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.
  6. Global Snapshot Algorithms
    Implement scalable algorithms for global snapshot as proposed here
  7. 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.
  8. 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.
  9. Spanning Tree
    Implement the distributed minimum spanning tree algorithm by Gallaghar, Humblet and Spira. click here
  10. P2P Systems
    Implement Chord algorithm for storing Key-Value pairs in a distributed system. See Chord
  11. 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 .
  12. 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 .
  13. 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/
  14. 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/
  15. 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
  16. 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/