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

General Information

Class meets Mondays, Wednesdays 1:10 - 2:25 PM in 633 Mudd.

Staff

Name Email Office hours Location
Prof. Stephen A. Edwards sedwards@cs.columbia.edu by appointment
Sparsh Binjrajka sb4835@columbia.edu Th 2-4 DSI Lounge (4th Fl. Mudd)
Leo (Feitong) Qiao flq2101@columbia.edu F 2-4P Zoom

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 (Basics contd.)
Wed Sep 11 Types and Pattern Matching
pdf
Mon Sep 16 (Types contd.)
Wed Sep 18 (Types contd.)
Sun Sep 22 (no lecture; turn in homework)
Homework 1 .hs filehw1.hs
Mon Sep 23 Monads and IO
pdf
Wed Sep 25 (Monads contd.)
Mon Sep 30 (Monads contd.)
Wed Oct 2 (Monads contd.)
Sun Oct 6 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 7 Lazy Evaluation and Seq
pdf
Tue Oct 8 Using and Defining Modules
I/O
pdf
pdf
Wed Oct 9 Lazy Evaluation and Seq (contd.)
Thu Oct 10 Parallel Evaluation
pdf
Mon Oct 14 (no lecture)
Wed Oct 16 (no lecture)
Sun Oct 20 (no lecture; turn in homework)
Homework 3 .zip filehw3.zip
Mon Oct 21 (no lecture)
Wed Oct 23 Strategies
pdf
Mon Oct 28 (Strategies contd.)
Sun Nov 3 (no lecture; turn in homework)
Homework 4 .pdf filehw4.pdf
Mon Nov 4-5 Election Day Holiday
Wed Nov 6 The Par Monad
pdf
Mon Nov 11 The Haskell Tool Stack
Repa: Regular Parallel Arrays
pdf
pdf
Wed Nov 13 Accelerate: GPU Arrays
pdf
Sun Nov 17 (no lecture; turn in homework)
Project Proposal
Mon Nov 18 The Lambda Calculus
pdf
Wed Nov 20 (Lambda contd.)
Mon Nov 25
Wed Nov 27-29 Thanksgiving Holiday
Mon Dec 2
Wed Dec 4
Mon Dec 9
Wed Dec 18 Final Project Report and Presentations

Teams

tictac: Tic Tac Toe Solver
pdfProposal pdfReport pdfPresentation ArchiveFiles
Milin Saini
unmatched:

Nuneke Kwetey
2048solver: 2048 Game (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Linh Bui
convex_hull: Convex Hull (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Claudia Cortell, Kyle Edwards, and Avighna Suresh
Convex_Hull: Convex Hull (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Henry Lin and George Morgulis
halma: Board Game (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Luana Liao and Catherine Lyu
Mandelbrot: Mandelbrot Set Generator (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Isabel Tu and Max Zhang
Minimax-Mancala: Mancala Game (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Caiwu Chen, Sindhu Krishnamurthy, and Daniel Manjarrez
Nonogram: Puzzle Solver (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Jittisa Kraprayoon and Dorothy Nelson
Othello: Game Solver (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Noam Hirschorn and Daniel Ivanovich
team_nik: Chess Solver (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Nikolaus Holzer
tsp-sat: DPLL-based SAT solver (FQ)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Yixuan LI, Jiaqian Li, and Phoebe Wang
a-star-traveling-salesman: Traveling Salesman (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Adele Bai and Vincent Mutolo
KQueens: N-Queens problem (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Viktor Basharkevich and Phillip Yan
maze-solver: A* For Solving Mazes (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Mohsin Rizvi
molecular-dynamics: Multiple Particle Simulation (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Pavan Ravindra
MVC: Minimum Vertex Cover (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Tony Giannini, Andre Mao, and Minh Hien Tran
parallel-DFS: Maze Solver (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Letong Dai and Samyukkta Suryanarayanan
ShockNet: Financial Simulator (SB)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Nick Ching and Erica Choi
document_retrieval: Search by similarity (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Mooizz Abdul and Samhit Chowdary Bhogavalli
assignment: Parallel Auction Algorithm (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Haolin Guo, Yuanqing Lei, and Ava Penn
sat-solver: SAT Solver (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Kevin Durand, Max Hahn, and Jonathan Tavarez
tsp-ga: Traveling Salseman Problem with Genetic Algorithms (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Timothy Johns
Word-Search-2: Serpentine Word Search (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Keith Lo, Ardrian Wong, and Sean Zhang
rubik: Rubik's Cube Solver (SE)
pdfProposal pdfReport pdfPresentation ArchiveFiles
Roberto Brera, Matthew Rosenberg, and Hongcheng Tian

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

Resources

Links