COMS W4995 001 Parallel Functional Programming Fall 2023 |
Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 633 Mudd.
Name | Office hours | Location | |
---|---|---|---|
Prof. Stephen A. Edwards | sedwards@cs.columbia.edu | by appointment | |
Gregory Schare | g.schare@columbia.edu | F 12-2P | 1301 Mudd (EE Lounge) |
Wei Qiang | wq2167@columbia.edu | F 3-5P | Zoom |
Sanjay Rajasekharan | sr3765@columbia.edu | 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 file | |
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 file | |
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 file | |
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 file | |
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 file | |
Mon Dec 4 | (Lambda contd.) |
||
Wed Dec 6 | |||
Mon Dec 11 | |||
Wed Dec 20 | Final Project Report and Presentations |
PFSS:
Parallel File System Stats Report Files Matthew Nelson |
PPTG:
Parallellized Procedure Terrain Generation Report Files Divjot Bedi |
MaximalClique:
Fast Fourier Transform (GS) Proposal Report Files Xuezhen Wang and Songheng Yin |
ParaSet:
Set Card Game Player (GS) Proposal Report Files Ellen Guo, Ryan Xu, and Cindy Zhu |
PokerEquity:
Poker Hand Evaluator (GS) Proposal Report Files James Fay and Lance Wong |
PSGD:
Parallel Stocastic Gradient Descent (GS) Proposal Report Files Rishabh Ganesh, Yealin Park, and Yue Sun |
Simplex:
Parallel Simplex Linear Programming Solver (GS) Proposal Report Files Bereket Molla |
trafficsim:
Parallelized Traffic Simulation (GS) Proposal Report Files Denzel Farmer and Andrew Yang |
WFS:
Map-Reduce Word Frequency Search (GS) Proposal Report Files Patricia Luc, Arush Sarda, and Sarah Yang |
Hitori:
Logic Puzzle Game (SE) Proposal Report Files Ava Hajratwala and Peter Yao |
Howard:
Ray-Casting Simulation (SE) Proposal Report Files Akash Nayar and Justin Peng |
MonteParSim:
Monte Carlo simulations (SE) Proposal Report Files Sparsh Binjrajka, Anna Christensen, and Griffin Newbold |
NW:
Needlemam-Wunsch Sequence Alignment (SE) Proposal Report Files Phillip Le Jr. and Emily Lo |
TraderContagion:
Agent-based Stocastic Model of Markets (SE) Proposal Report Files Tsigemariam Assegid |
2048Solver:
Puzzle Solver (SR) Proposal Report Files Alexander Bala and Michal Hajlasz |
8-Parzzle:
8-Puzzle Solver (SR) Proposal Report Files Ruth Lee, Ahmad Rawwagah, and Kimberly Tsao |
AlphaGambit:
Minimax Chess Solver (SR) Proposal Report Files Abhishek Chaudhary, David Zhang, and Anthony Zhou |
CheckersBot:
Checkers Solver (SR) Proposal Report Files Maria Catarina Coelho and Kavika Krishnan |
MatrixBFS:
Parallel BFS (SR) Proposal Report Files Blake Appleby, Jonathan Hall, and Ryan Wee |
MazeSolver:
Rat-in-a-Maze solver (SR) Proposal Report Files Samya Ahsan, Nicole Lin, and Alice Wang |
UTTSolver:
Ultimate Tic-Tac-Toe Solver (SR) Proposal Report Files HASAN ALQASSAB and Fernando Macchiavello Cauvi |
Life:
Conway's Game of Life (WQ) Proposal Report Files Mark Mazel |
NNS:
Nearest Neighbor Search (WQ) Proposal Report Files Kevin Jiang, Jeannie Ren, and Joshua Zhou |
StarFinder:
Constellation Identifier (WQ) Proposal Report Files Yumeng Bai, Stella Park, and Michelle Tang |
NaiveBayes:
Naive Bayes Classifier (WQ) Proposal Report Files Amy Qi and Jiakai Xu |
TSP:
Genetic Algorithm Traveling Salesman Problem (WQ) Proposal Report Files Maximo Jalife and Fernando Camurugy Notari |
VRP:
Vehicle Routing Problem using ACO (WQ) Proposal Report Files Vincent Geiger and Siyi Hong |
My favorites
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:
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