![]() |
![]() |
|
COMS W4995 003 Parallel Functional Programming Fall 2024 |
Class meets Mondays, Wednesdays 1:10 - 2:25 PM in 633 Mudd.
Name | 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 |
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 4 | Introduction Basic Haskell |
![]() ![]() |
|
Mon Sep 9 | (Basics contd.) |
||
Wed Sep 11 | Types and Pattern Matching |
![]() |
|
Mon Sep 16 | (Types contd.) |
||
Wed Sep 18 | (Types contd.) |
||
Sun Sep 22 | (no lecture; turn in homework) |
Homework 1
.hs file![]() |
|
Mon Sep 23 | Monads and IO |
![]() |
|
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 file![]() |
|
Mon Oct 7 | Lazy Evaluation and Seq |
![]() |
|
Tue Oct 8 | Using and Defining Modules I/O |
![]() ![]() |
|
Wed Oct 9 | Lazy Evaluation and Seq (contd.) |
||
Thu Oct 10 | Parallel Evaluation |
![]() |
|
Mon Oct 14 | (no lecture) |
||
Wed Oct 16 | (no lecture) |
||
Sun Oct 20 | (no lecture; turn in homework) |
Homework 3
.zip file![]() |
|
Mon Oct 21 | (no lecture) |
||
Wed Oct 23 | Strategies |
![]() |
|
Mon Oct 28 | (Strategies contd.) |
||
Sun Nov 3 | (no lecture; turn in homework) |
Homework 4
.pdf file![]() |
|
Mon Nov 4-5 | Election Day Holiday | ||
Wed Nov 6 | The Par Monad |
![]() |
|
Mon Nov 11 | The Haskell Tool Stack Repa: Regular Parallel Arrays |
![]() ![]() |
|
Wed Nov 13 | Accelerate: GPU Arrays |
![]() |
|
Sun Nov 17 | (no lecture; turn in homework) |
Project Proposal | |
Mon Nov 18 | The Lambda Calculus |
![]() |
|
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 |
tictac:
Tic Tac Toe Solver![]() ![]() ![]() ![]() Milin Saini |
unmatched:
Nuneke Kwetey |
2048solver:
2048 Game (FQ)![]() ![]() ![]() ![]() Linh Bui |
convex_hull:
Convex Hull (FQ)![]() ![]() ![]() ![]() ![]() Claudia Cortell, Kyle Edwards, and Avighna Suresh |
Convex_Hull:
Convex Hull (FQ)![]() Henry Lin and George Morgulis |
halma:
Board Game (FQ)![]() ![]() ![]() ![]() ![]() Luana Liao and Catherine Lyu |
Mandelbrot:
Mandelbrot Set Generator (FQ)![]() ![]() ![]() ![]() Isabel Tu and Max Zhang |
Minimax-Mancala:
Mancala Game (FQ)![]() ![]() ![]() ![]() Caiwu Chen, Sindhu Krishnamurthy, and Daniel Manjarrez |
Nonogram:
Puzzle Solver (FQ)![]() ![]() ![]() ![]() Jittisa Kraprayoon and Dorothy Nelson |
Othello:
Game Solver (FQ)![]() ![]() ![]() ![]() Noam Hirschorn and Daniel Ivanovich |
team_nik:
Chess Solver (FQ)![]() ![]() ![]() ![]() Nikolaus Holzer |
tsp-sat:
DPLL-based SAT solver (FQ)![]() ![]() ![]() ![]() Yixuan LI, Jiaqian Li, and Phoebe Wang |
a-star-traveling-salesman:
Traveling Salesman (SB)![]() ![]() ![]() ![]() ![]() Adele Bai and Vincent Mutolo |
KQueens:
N-Queens problem (SB)![]() ![]() ![]() ![]() Viktor Basharkevich and Phillip Yan |
maze-solver:
A* For Solving Mazes (SB)![]() ![]() ![]() ![]() Mohsin Rizvi |
molecular-dynamics:
Multiple Particle Simulation (SB)![]() ![]() ![]() ![]() Pavan Ravindra |
MVC:
Minimum Vertex Cover (SB)![]() ![]() ![]() ![]() Tony Giannini, Andre Mao, and Minh Hien Tran |
parallel-DFS:
Maze Solver (SB)![]() ![]() ![]() ![]() Letong Dai and Samyukkta Suryanarayanan |
ShockNet:
Financial Simulator (SB)![]() ![]() ![]() ![]() Nick Ching and Erica Choi |
document_retrieval:
Search by similarity (SE)![]() ![]() ![]() ![]() Mooizz Abdul and Samhit Chowdary Bhogavalli |
assignment:
Parallel Auction Algorithm (SE)![]() ![]() ![]() ![]() Haolin Guo, Yuanqing Lei, and Ava Penn |
sat-solver:
SAT Solver (SE)![]() ![]() ![]() ![]() Kevin Durand, Max Hahn, and Jonathan Tavarez |
tsp-ga:
Traveling Salseman Problem with Genetic Algorithms (SE)![]() ![]() ![]() ![]() Timothy Johns |
Word-Search-2:
Serpentine Word Search (SE)![]() ![]() ![]() ![]() Keith Lo, Ardrian Wong, and Sean Zhang |
rubik:
Rubik's Cube Solver (SE)![]() ![]() ![]() ![]() Roberto Brera, Matthew Rosenberg, and Hongcheng Tian |
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