Overview

The goal of the course project is to give you a taste of what it is like to do research:

  • first you will find and refine a project topic organized around a general problem to solve, this will require some examination of related work (resulting in an annotated bibliography)

  • second, you will come up with an initial solution to the problem and a plan for implementing your solution

  • third, you will implement your plan, possibly modifying it as needed

  • fourth, you will evaluate your solution though some type of verification or testing process

  • finally, you will convey the results of your work to others both in written form and through an oral presentation and a project demo.

Since this project spans the second half of the course, it should be a substantial amount of work.

You may choose from a very broad range of projects, but your project

  1. must have a main focus on parallel or distributed computing.

  2. must have some implementation and some experimentation and evaluation parts.

  3. must have some component that looks like science; there should be a general question that you are trying to answer though your project.

Getting Started

You are welcome and encouraged to come up with your own project idea. You also may start with a project suggestion that I’ll provide with the project proposal assignment. Anything I suggest is just a starting point for a project idea, and is not fully investigated. As a result, all require some background investigative work and further definition of the problem you are solving and how you plan to solve it.

You should begin with a general idea of the problem you want to look at, then do a literature search of related work and projects to get some ideas of what has been done and what some approaches are to solving your problem. It is fine to do a project whose goal is to reproduce other researcher’s results, and/or to compare different, already developed, approaches to a particular problem. However, there must be some question that you are trying to answer through your project (one example of a general question is "Can distributed service X be efficiently implemented on system Y?"). The answer to the question(s) associated with your project will involve both implementation and testing. Depending on your project, it may have more focus on implementation or more on testing, but every project must have some of both.

You must work in groups on your course project; no individual projects are allowed. Groups of size 2 or 3 work best.

I will help singles find groups, but I encourage you to find your own group based on interests in similar projects ideas.

Any group of 4 or larger should split some work into subgroups of 2 or 3, each subgroup focusing on a significant piece of the larger project. Everyone in the group should be working closely with at least one other group member. If you form a large group (beyond size 4), to work on a very large project, then your whole group should meet a couple times a week to check in on progress of subgroups, help each other with difficulties, coordinate work across subgroups, and discuss the group’s work as a whole. If you create such a mega-group, come talk with me about your project part requirements, and I will set up Project repo for your group members that is a bit different from the default one.

Parts of the Project Assignment

Assignments for the different Project Parts will be linked to here as they are assigned:

Part 1: Proposal and Annotated Bibliography:

Due: by 1:15pm, Thursday Nov. 9

Counts towards 5% of your final grade.

Assignment link: Proposal Assignment


Part 2: Project Work Week

Week 10 (week of Nov. 13)

Project Work Week: by by 11:59pm, Sunday Nov. 19 push source and README_PWW to Project repo.

Assignment link: Project Work Week (also information about Midway Report and Midway Presentation).


Part 2: Midway Report and Presentation

Right after project work week, you will deliver an short oral presentation of your project to the class, and submit a short written progress report and updated project timeline.

Presentation Due: Tuesday Nov. 21

Report Due: by 5pm, Wednesday Nov. 22

Counts towards 5% of your final grade.


Part 3: Final Report, Presentation, and Demo

Presentation Due: Monday Dec. 11 and Tuesday Dec. 12

  • Times: Mon: 1:15-2:45, 3-4:30, and Tues: 1:15-2:30

  • Locations: 104 Sci Cntr

    NOTE: you are required to attend all presentations sessions (both Monday sessions, and the Tuesday session). The only exception is if you have another class that meets during one of the Monday time slots. If this is the case, you should let me know right away (and fill out the presentation poll posted to EdStem). Please schedule your other events. meetings, work schedules, etc., on these two days with this in mind.

Written Report Due: Tuesday Dec. 19 before 5pm

Project Demo Due by: TBD, during finals week

Project Code Due: Wednesday Dec. 20 by 5pm all project code pushed to repo

Counts towards 30% of your final grade.

Assignment link: Final Project Parts


Available SW and Systems

Software available on all CS lab machines:

  • CUDA

  • pthreads

  • OpenMPI

  • OpenMP

If there is other software you need that is not available on our system, we may be able to install it or install it on our system or on some of our machines. You should talk with me and Jeff about this.

There is also other software installed on other systems available for your use, like ACCESS and AWS.

Machines and Systems available:

  • CS lab machines: run Cuda, openMPI, openMP, pthreads.

  • Subset of CS lab machines (ssh access only) available only to CS87 students:

    Machine     Number of Cores
    
    chervil  (16 cores, 32 hyper-threaded)
    
    branch   (6 cores, 12 hyper-threaded)
    hasa     (6 cores, 12 hyper-threaded)
    hash     (6 cores, 12 hyper-threaded)
    input    (6 cores, 12 hyper-threaded)
    isa      (6 cores, 12 hyper-threaded)
    loop     (6 cores, 12 hyper-threaded)
    output   (6 cores, 12 hyper-threaded)
    pop      (6 cores, 12 hyper-threaded)
    push     (6 cores, 12 hyper-threaded)
    while    (6 cores, 12 hyper-threaded)
    search   (4 cores,  8 hyper-threaded)
    stack    (4 cores,  8 hyperthreaded)
    tree     (4 cores,  8 hyper-threaded)
    xor      (4 cores,  8 hyper-threaded)
  • ACCESS machines. Use ACCESS only for large experiments after testing on other systems.

    There are also other ACCESS machines you can use. All machines support MPI, and many also support CUDA and other parallel languages. There are a lot of libraries installed to use too. Contact Andrew Reuther in ITS to get access to other ACCESS machines, or if you need more ACCESS allocation hours.

  • The Swarthmore Stelka Compute Cluster.

  • I have a small cluster that could be available for some projects. However, it is running my research OS, and may not be as usable as using an ACCESS or strelka cluster.

  • We may be able to pull a few machines out of general lab use for special purposes if your project requires root access. Using virtual machines in AWS may also be an option for something like this.

We may be able to purchase some smaller hardware for course projects. I have some money to build a small cluster of something like raspberry pi nodes. Anything like this would need to be budgeted and purchased soon to be available for use in a project.