Stephen A. Edwards Columbia University Crown
COMS W4995 001
Parallel Functional Programming
Fall 2023

General Information

Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 633 Mudd.


Name Email Office hours Location
Prof. Stephen A. Edwards by appointment
Gregory Schare F 12-2P 1301 Mudd (EE Lounge)
Wei Qiang F 3-5P Zoom
Sanjay Rajasekharan W 10-12P 1fl. Mudd TA room


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.


Date Lecture Notes Due
Wed Sep 6 Introduction
Basic Haskell
Mon Sep 11 (Basics contd.)
Wed Sep 13 Types and Pattern Matching
Mon Sep 18 (Types contd.)
Wed Sep 20 No lecture
Sun Sep 24 (no lecture; turn in homework)
Homework 1 .hs filehw1.hs
Mon Sep 25 (Types contd.)
Wed Sep 27 Recursion and Higher Order Functions
Mon Oct 2 (Recursion contd.)
Wed Oct 4 Using and Defining Modules
Sun Oct 8 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 9 I/O
Wed Oct 11 Functors
Mon Oct 16 (Functors contd.)
Wed Oct 18 Monads
Sun Oct 22 (no lecture; turn in homework)
Homework 3 .hs filehw3.hs
Mon Oct 23 (Monads contd.)
Wed Oct 25 Lazy and Parallel Evaluation
Mon Oct 30 Strategies
Wed Nov 1 (Strategies contd.)
Sun Nov 5 (no lecture; turn in homework)
Homework 4 .zip
Mon Nov 6 Election Day Holiday
Wed Nov 8 Profiling
Mon Nov 13 The Par Monad
Wed Nov 15 The Haskell Tool Stack
Mon Nov 20 Repa: Regular Parallel Arrays
Wed Nov 22-24 Thanksgiving Holiday
Mon Nov 27 Accelerate: GPU Arrays
Project Proposal
Wed Nov 29 The Lambda Calculus
Sun Dec 3 (no lecture; turn in homework)
Homework 5 .zip
Mon Dec 4 (Lambda contd.)
Wed Dec 6
Mon Dec 11
Wed Dec 20 Final Project Report and Presentations


PFSS: Parallel File System Stats
pdfReport ArchiveFiles
Matthew Nelson
PPTG: Parallellized Procedure Terrain Generation
pdfReport ArchiveFiles
Divjot Bedi
MaximalClique: Fast Fourier Transform (GS)
pdfProposal pdfReport ArchiveFiles
Xuezhen Wang and Songheng Yin
ParaSet: Set Card Game Player (GS)
pdfProposal pdfReport ArchiveFiles
Ellen Guo, Ryan Xu, and Cindy Zhu
PokerEquity: Poker Hand Evaluator (GS)
pdfProposal pdfReport ArchiveFiles
James Fay and Lance Wong
PSGD: Parallel Stocastic Gradient Descent (GS)
pdfProposal pdfReport ArchiveFiles
Rishabh Ganesh, Yealin Park, and Yue Sun
Simplex: Parallel Simplex Linear Programming Solver (GS)
pdfProposal pdfReport ArchiveFiles
Bereket Molla
trafficsim: Parallelized Traffic Simulation (GS)
pdfProposal pdfReport ArchiveFiles
Denzel Farmer and Andrew Yang
WFS: Map-Reduce Word Frequency Search (GS)
pdfProposal pdfReport ArchiveFiles
Patricia Luc, Arush Sarda, and Sarah Yang
Hitori: Logic Puzzle Game (SE)
pdfProposal pdfReport ArchiveFiles
Ava Hajratwala and Peter Yao
Howard: Ray-Casting Simulation (SE)
pdfProposal pdfReport ArchiveFiles
Akash Nayar and Justin Peng
MonteParSim: Monte Carlo simulations (SE)
pdfProposal pdfReport ArchiveFiles
Sparsh Binjrajka, Anna Christensen, and Griffin Newbold
NW: Needlemam-Wunsch Sequence Alignment (SE)
pdfProposal pdfReport ArchiveFiles
Phillip Le Jr. and Emily Lo
TraderContagion: Agent-based Stocastic Model of Markets (SE)
pdfProposal pdfReport ArchiveFiles
Tsigemariam Assegid
2048Solver: Puzzle Solver (SR)
pdfProposal pdfReport ArchiveFiles
Alexander Bala and Michal Hajlasz
8-Parzzle: 8-Puzzle Solver (SR)
pdfProposal pdfReport ArchiveFiles
Ruth Lee, Ahmad Rawwagah, and Kimberly Tsao
AlphaGambit: Minimax Chess Solver (SR)
pdfProposal pdfReport ArchiveFiles
Abhishek Chaudhary, David Zhang, and Anthony Zhou
CheckersBot: Checkers Solver (SR)
pdfProposal pdfReport ArchiveFiles
Maria Catarina Coelho and Kavika Krishnan
MatrixBFS: Parallel BFS (SR)
pdfProposal pdfReport ArchiveFiles
Blake Appleby, Jonathan Hall, and Ryan Wee
MazeSolver: Rat-in-a-Maze solver (SR)
pdfProposal pdfReport ArchiveFiles
Samya Ahsan, Nicole Lin, and Alice Wang
UTTSolver: Ultimate Tic-Tac-Toe Solver (SR)
pdfProposal pdfReport ArchiveFiles
HASAN ALQASSAB and Fernando Macchiavello Cauvi
Life: Conway's Game of Life (WQ)
pdfProposal pdfReport ArchiveFiles
Mark Mazel
NNS: Nearest Neighbor Search (WQ)
pdfProposal pdfReport ArchiveFiles
Kevin Jiang, Jeannie Ren, and Joshua Zhou
StarFinder: Constellation Identifier (WQ)
pdfProposal pdfReport ArchiveFiles
Yumeng Bai, Stella Park, and Michelle Tang
NaiveBayes: Naive Bayes Classifier (WQ)
pdfProposal pdfReport ArchiveFiles
Amy Qi and Jiakai Xu
TSP: Genetic Algorithm Traveling Salesman Problem (WQ)
pdfProposal pdfReport ArchiveFiles
Maximo Jalife and Fernando Camurugy Notari
VRP: Vehicle Routing Problem using ACO (WQ)
pdfProposal pdfReport ArchiveFiles
Vincent Geiger and Siyi Hong

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 in groups of 2 or 3. 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