Stephen A. Edwards Columbia University Crown
COMS W4995 003
Parallel Functional Programming
Fall 2019

General Information

Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 417 Mathematics.

Staff

Name Email Office hours Location
Prof. Stephen A. Edwards sedwards@cs.columbia.edu By appt. 462 CSB
John Hui jzh2106@columbia.edu 2-4 Mondays TA Room, 1st Floor Mudd
Amanda Liu al3623@columbia.edu 2-4 Tuesdays TA Room, 1st Floor Mudd
Pierre Tholoniat pt2537@columbia.edu 10-12 Wednesdays TA Room, 1st Floor Mudd

Overview

Prerequisites: COMS 3157 Advanced Programming or the equivalent. Knowledge of at least one programming language and related development tools/environments required. Functional programming experience not required.

Functional programming in Haskell, with an emphasis on parallel programs.

The goal of this class is to introduce you to the functional programming paradigm. You will learn to code in Haskell; this experience will also prepare you to code in other functional languages. The first half the the class will cover basic (single-threaded) functional programming; the second half will cover how to code parallel programs in a functional setting.

Schedule

Date Lecture Notes Due
Wed Sep 4 Introduction
Basic Haskell
pdf
pdf
Mon Sep 9 Types and Typeclasses
pdf
Wed Sep 11 Basic Function Definitions
pdf
Mon Sep 16
Wed Sep 18 Recursion and Higher Order Functions
pdf
Mon Sep 23
Wed Sep 25 Using and Defining Modules
pdf
Homework 1 .hs filehw1.hs
Mon Sep 30
Wed Oct 2 User-Defined Types
pdf
Mon Oct 7
Wed Oct 9 I/O
pdf
Fri Oct 11 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 14 (No lecture)
Wed Oct 16 (No lecture)
Mon Oct 21
Wed Oct 23 Functors
pdf
Fri Oct 25 (no lecture; turn in homework)
Homework 3 .zip filehw3.zip
Mon Oct 28
Wed Oct 30 Monads
pdf
Mon Nov 4 Election Day Holiday
Wed Nov 6
Mon Nov 11
Wed Nov 13
Mon Nov 18
Wed Nov 20 Lazy and Parallel Evaluation
pdf
Fri Nov 22 (no lecture; turn in homework)
Homework 4 .zip filehw4.zip Project Proposal
Mon Nov 25
Wed Nov 27 Thanksgiving Holiday
Mon Dec 2 Strategies
pdf
Wed Dec 4
Mon Dec 9 The Par Monad
pdf
Wed Dec 18 (no lecture)
Project report and code

Teams

random-graphs:
pdfProposal pdfReport ArchiveFiles
Dhruv Singh
2048-puzzle1: (AL)
pdfProposal pdfReport ArchiveFiles
Tri Do
freecel: (AL)
pdfProposal pdfReport ArchiveFiles
Joe Huang
crossword: (AL)
pdfProposal pdfReport ArchiveFiles
Rose Huang and Biqing Qiu
3-partition: (AL)
pdfProposal pdfReport ArchiveFiles
Hyeon-U Kang
suicide-chess: (AL)
pdfProposal pdfReport ArchiveFiles
Alexander Khoma and Jakwanul Safin
othello: (AL)
pdfProposal pdfReport ArchiveFiles
Kaiji Lu
2048-puzzle2: (AL)
pdfProposal pdfReport ArchiveFiles
Colin Brown and Jonathan Rich
boggle: (AL)
pdfProposal pdfReport ArchiveFiles
Khyber Sen
othello-2: (AL)
pdfProposal pdfReport ArchiveFiles
Chengtian Xu
gomoku: (AL)
pdfProposal pdfReport ArchiveFiles
Zheng Yao and Qinhan Zhou
cellular-fluid: (JH)
pdfProposal pdfReport ArchiveFiles
Rongcui Dong
HipgRap: (JH)
pdfProposal pdfReport ArchiveFiles
Bicheng Gao and Kangwei Ling
ray-tracer: (JH)
pdfProposal pdfReport ArchiveFiles
Garrison Grogan
n-body: (JH)
pdfProposal pdfReport ArchiveFiles
Kundan Guha
ray-tracer2: (JH)
pdfProposal pdfReport ArchiveFiles
Jiakang Guo
polygon-rendering: (JH)
pdfProposal pdfReport ArchiveFiles
Joshua Learn
particles: (JH)
pdfProposal pdfReport ArchiveFiles
Morgan Navarro
sph: (JH)
pdfProposal pdfReport ArchiveFiles
Zachary Schuermann
r-tree: (JH)
pdfProposal pdfReport ArchiveFiles
Samurdha Jayasinghe Mudi and Ge Wang
mandelbrot: (JH)
pdfProposal pdfReport ArchiveFiles
Amanda Liu
D*-Lite: (PT)
pdfProposal pdfReport ArchiveFiles
Eric Chase
auto-complete: (PT)
pdfProposal pdfReport ArchiveFiles
Siwei Chen
n-grams: (PT)
pdfProposal pdfReport ArchiveFiles
Dave Epstein
ALife: (PT)
pdfProposal pdfReport ArchiveFiles
Alex Gajewski
word-break-ii: (PT)
pdfProposal pdfReport ArchiveFiles
Michelle Mao and Hana Mizuta
knapsack: (PT)
pdfProposal pdfReport ArchiveFiles
Shaohua Tang and Jing Wang
knapsack-2: (PT)
pdfProposal pdfReport ArchiveFiles
Jt Timpanaro
robbie: (PT)
pdfProposal pdfReport ArchiveFiles
Eli Whitehouse
collaborative-filtering: (PT)
pdfProposal pdfReport ArchiveFiles
ZHOU ZHUANG
auto-suggest: (PT)
pdfProposal pdfReport ArchiveFiles
Tomer Zwi
graph-coloring: (SE)
pdfProposal pdfReport ArchiveFiles
Ishan Guru and Haneen Mohammed
sodoku: (SE)
pdfProposal pdfReport ArchiveFiles
Jiaheng He
map-reduce1: (SE)
pdfProposal pdfReport ArchiveFiles
Yimin Hu
mutual-friends: (SE)
pdfProposal pdfReport ArchiveFiles
Yefri Gaitan and Ecenaz Ozmen
kenken: (SE)
pdfProposal pdfReport ArchiveFiles
Harry Smith
map-reduce2: (SE)
pdfProposal pdfReport ArchiveFiles
Jian Song and Ziao Wang
map-reduce3: (SE)
pdfProposal pdfReport ArchiveFiles
Sambhav Anand and Kanishk Vashisht
topo-sort: (SE)
pdfProposal pdfReport ArchiveFiles
Raymond Li and Wendy Wang
pagerank: (SE)
pdfProposal pdfReport ArchiveFiles
Zefeng Liu and Xi Yang

star My favorites

The Project

The project should be a parallel implementation of some algorithm/technique in Haskell. Marlow parallelizes a Sudoku solver and a K-means clustering algorithm in his book; these are baseline projects. I am looking for something more sophisticated than these, but not dramatically more complicated.

Do the project alone or in pairs. List all your names and UNIs in the proposal and final report

There are three deliverables:

  1. A one- or two-page proposal that gives the TAs and me an inda of what you plan to do so we can give you feedback about restricting or increasing the scope. Upload a PDF file to Courseworks describing your project and team members, if any.
  2. A report describing your project: what you implemented and how, some performance figures indicating how much better your solution runs in parallel (e.g., time its execution on one core and compare that to running it on multiple cores), and a full listing of the code you wrote. Upload a multi-page PDF file to Courseworks; due during Finals Week.
  3. Along with your report, submit a .tar.gz file including the code and test cases for your project. Make it so I can compile and run it, perhaps by including a README file with instructions for running it with the Haskell Stack. Due with the repot.

Strive for a little well-written, well-tested program that handles everything gracefully rather than a large, feature-filled system. If you're short on time, drop a feature in preference to improving the code you have.

Other project ideas include any sort of map/reduce application, graphics rendering, physical simulation (e.g., particles), parallel grep or word count, a Boolean satisfiability solver, or your favorite NP-complete problem. If your program is algorithmically simple (e.g., word count or word frequency count), it need to scale to huge inputs. AI (as opposed to machine learning) applications, such as game playing algorithms, are generally a good idea. Algorithms that have a lot of matrix multiplication at their core (e.g., deep learning) are less suitable.

Feel free to ask the instructor or TAs for project advice or criticism

Resources

Class Policies

Valid HTML 4.01Valid CSS