Stephen A. Edwards Columbia University Crown
COMS W4995 002
Parallel Functional Programming
Fall 2022

General Information

Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 451 CSB.

Staff

Name Email Office hours Location
Prof. Stephen A. Edwards sedwards@cs.columbia.edu by appointment
Christopher Yoon cjy2129@columbia.edu T 8-9P, F 3-4P Zoom (T); 1fl. Mudd TA room (F)
Leo (Feitong) Qiao flq2101@columbia.edu W, Th 2-3P Zoom
Emily Sillars ems2331@columbia.edu M 10-11A, 8-9P 1fl. Mudd TA room (10-11A); Zoom (8-9P)

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 7 Introduction
Basic Haskell
pdf
pdf
Mon Sep 12 (Basics contd.)
Wed Sep 14 Types and Pattern Matching
pdf
Mon Sep 19 (Types contd.)
Wed Sep 21 Typeclasses and Polymorphism
pdf
Sun Sep 25 (no lecture; turn in homework)
Homework 1 .hs filehw1.hs
Mon Sep 26 (Typeclasses contd.)
Wed Sep 28 Recursion and Higher Order Functions
pdf
Mon Oct 3 (Recursion contd.)
Wed Oct 5 Using and Defining Modules
pdf
Sun Oct 9 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 10 I/O
pdf
Wed Oct 12 Functors
pdf
Mon Oct 17 (Functors contd.)
Wed Oct 19 Monads
pdf
Sun Oct 23 (no lecture; turn in homework)
Homework 3 .hs filehw3.hs
Mon Oct 24 (Monads contd.)
Wed Oct 26 (Monads contd.)
Mon Oct 31 Lazy and Parallel Evaluation
pdf
Wed Nov 2 Strategies
pdf
Sun Nov 6 (no lecture; turn in homework)
Homework 4 .zip filehw4.zip
Mon Nov 7 Election Day Holiday
Wed Nov 9 (Strategies contd.)
Mon Nov 14 (Strategies contd.)
Wed Nov 16 The Par Monad
The Haskell Tool Stack
pdf
pdf
Sun Nov 20 (no lecture; turn in homework)
Homework 5 .zip filehw5.zip
Mon Nov 21 Repa: Regular Parallel Arrays
pdf
Wed Nov 23 Thanksgiving Holiday
Mon Nov 28 Accelerate: GPU Arrays
pdf
Project Proposal
Wed Nov 30 The Lambda Calculus
pdf
Mon Dec 5 (Lambda contd.)
Wed Dec 7
Mon Dec 12
Wed Dec 21 Final Project Report and Presentations

Teams

connect4: Connect 4 AI
pdfProposal pdfReport ArchiveFiles
Gregory Fu
PageRank: Map-Reduce applications
pdfProposal pdfReport ArchiveFiles
Jeremy Carin
brandon:

Brandon Cruz
AmazonSearch: Minimax search for Mancala (CY)
pdfProposal pdfReport ArchiveFiles
Chance Onyiorah
Apriori1: ECLAT + Max-Miner (CY)
pdfProposal pdfReport ArchiveFiles
Daniel Indictor
Apriori2: Data Mining: Frequent Itemset (CY)
pdfProposal pdfReport ArchiveFiles
Yihan Yin
autocomplete2: Parallel Autocomplete (CY)
pdfProposal pdfReport ArchiveFiles
Eugene Kim
BTree: Sudoku solver (CY)
pdfProposal pdfReport ArchiveFiles
Ari An and Xinyao Peng
CollabFilter: Item-based Collaborative Filtering (Movie recommendations) (CY)
pdfProposal pdfReport ArchiveFiles
Hsing-Wen Hsu
inf-max: Hascade: influence maximization problem (CY)
pdfProposal pdfReport ArchiveFiles
Yiming Fang
N-GramAutoComplete: Predictive Text Autocomplete (CY)
pdfProposal pdfReport ArchiveFiles
Sebastian Hereu and Elisa Luo
ParPriori: Apriori algorithm (CY)
pdfProposal pdfReport ArchiveFiles
Evan Li and Claire Liu
ParWordle: Parallel Wordle (CY)
pdfProposal pdfReport ArchiveFiles
Zachary Coeur and Sanjay Rajasekharan
WordHunt: (CY)
pdfProposal pdfReport ArchiveFiles
Allison Liu
Wordle: Parallel Wordle Solver (CY)
pdfProposal pdfReport ArchiveFiles
Jennifer Wang
WordSearch: Word search in a grid (CY)
pdfProposal pdfReport ArchiveFiles
Swetha Shanmugam
6Degrees: 6 degrees of separation testing (ES)
pdfProposal pdfReport ArchiveFiles
Casey Olsen and Jorge Raad
AStar: OSM Parallel A* Search (ES)
pdfProposal pdfReport tar.xz-Files
Donghan Kim
BananaSolve: Bananagram solver (ES)
pdfProposal pdfReport ArchiveFiles
Shai Goldman and Aaron Priven
ConvexHull: Parallel Convex Hull (ES)
pdfProposal pdfReport ArchiveFiles
Andrei Coman
Fleet: Parallel N-Queens (ES)
pdfProposal pdfReport ArchiveFiles
Martin Ristovski and Anastasija Tortevska
MazeSolver: A* Search Algorithm (ES)
pdfProposal pdfReport ArchiveFiles
Reid Jesselson
PolInc: Political Inclination in Social Networks (ES)
pdfProposal pdfReport ArchiveFiles
Sai Teja Reddy Moolamalla and Vikram Waradpande
Scrabble: Word Search (ES)
pdfProposal pdfReport ArchiveFiles
Helen Chu and Alexander Lindenbaum
TSK: Traveling Salesman with K-Means (ES)
pdfProposal pdfReport ArchiveFiles
Matthew Goodman and Ashar Nadeem
TSP: Traveling Salesman (ES)
pdfProposal pdfReport ArchiveFiles
Trikay Nalamada and Joseph Parker IV
WordLadder: Parallel Word Ladder Search (ES)
pdfProposal pdfReport ArchiveFiles
Aruj Jain and Benjamin Magid
Chess: Chess Position Evaluator (LQ)
pdfProposal pdfReport ArchiveFiles
Michael Lee
Connect4: Minimax solver for the Connect4 game (LQ)
pdfProposal pdfReport ArchiveFiles
Beza Amsalu and Miira Efrem
Gomoku: Gomoku solver (LQ)
pdfProposal pdfReport ArchiveFiles
Danny Hou
Go: The Game of Gomoku (LQ)
pdfProposal pdfReport ArchiveFiles
Matthew Retchin
Kalah: Min-Max Kalah Game AI (LQ)
pdfProposal pdfReport ArchiveFiles
David Cendejas and Haruki Gonai
MCTS: A Library for General Game Playing (LQ)
pdfProposal pdfReport ArchiveFiles
Jose Ramos
ParBoids: Bird Flight Simulator (LQ)
pdfProposal pdfReport ArchiveFiles
Catelen Wu and Ethan Wu
ParVarys: Coflow Scheduling (LQ)
pdfProposal pdfReport ArchiveFiles
Etesam Ansari and Yunlan Li
qiang: Boolean SAT Solver (LQ)
pdfProposal pdfReport ArchiveFiles
Wei Qiang
Vigenere: Crypto (LQ)
pdfProposal pdfReport ArchiveFiles
Alex Nicita
WebScraper: (LQ)
pdfProposal pdfReport ArchiveFiles
Jack Wang
YTM: Yield to Maturity Calculations (LQ)
pdfProposal tgz-Report
Anjali Smith
FordFulkerson: Max-flow Min-cut algorithm (SE)
pdfProposal pdfReport ArchiveFiles
Jiayuan Li
GRNPar: Gene Regulation Network Inference (SE)
pdfProposal pdfReport ArchiveFiles
William Das and Anushka Gupta
ParBnC: Integer Linear Program Solver (SE)
pdfProposal pdfReport ArchiveFiles
Weixi Zhuo
Joins: Parallel Database Joins (SE)
pdfProposal pdfReport tar.xz-Files
Amery Chang
Nonollel: Nonogram Solver (SE)
pdfProposal pdfReport ArchiveFiles
Jason Eriksen and Xurxo Riesco Perez
ParBag: Bootstrap Aggregation/Bagging learning algorithm (SE)
pdfProposal pdfReport ArchiveFiles
Joshua Hahn
ParticleTrack: Particle Collider Track Detection (SE)
pdfProposal pdfReport ArchiveFiles
Lukas Arnold and Brendan Cunnie
RandomForest: ID3 Decision Trees (SE)
pdfProposal
Shaun Kim
SubsetConstruction: Subset Construction: NFA to DFA (SE)
pdfProposal pdfReport ArchiveFiles
Alexis Gadonneix and Nikhil Mehta

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

Links