![]() |
![]() |
|
COMS W4995 002 Parallel Functional Programming Fall 2022 |
Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 451 CSB.
Name | 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) |
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 7 | Introduction Basic Haskell |
![]() ![]() |
|
Mon Sep 12 | (Basics contd.) |
||
Wed Sep 14 | Types and Pattern Matching |
![]() |
|
Mon Sep 19 | (Types contd.) |
||
Wed Sep 21 | Typeclasses and Polymorphism |
![]() |
|
Sun Sep 25 | (no lecture; turn in homework) |
Homework 1
.hs file![]() |
|
Mon Sep 26 | (Typeclasses contd.) |
||
Wed Sep 28 | Recursion and Higher Order Functions |
![]() |
|
Mon Oct 3 | (Recursion contd.) |
||
Wed Oct 5 | Using and Defining Modules |
![]() |
|
Sun Oct 9 | (no lecture; turn in homework) |
Homework 2
.hs file![]() |
|
Mon Oct 10 | I/O |
![]() |
|
Wed Oct 12 | Functors |
![]() |
|
Mon Oct 17 | (Functors contd.) |
||
Wed Oct 19 | Monads |
![]() |
|
Sun Oct 23 | (no lecture; turn in homework) |
Homework 3
.hs file![]() |
|
Mon Oct 24 | (Monads contd.) |
||
Wed Oct 26 | (Monads contd.) |
||
Mon Oct 31 | Lazy and Parallel Evaluation |
![]() |
|
Wed Nov 2 | Strategies |
![]() |
|
Sun Nov 6 | (no lecture; turn in homework) |
Homework 4
.zip file![]() |
|
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 |
![]() ![]() |
|
Sun Nov 20 | (no lecture; turn in homework) |
Homework 5
.zip file![]() |
|
Mon Nov 21 | Repa: Regular Parallel Arrays |
![]() |
|
Wed Nov 23 | Thanksgiving Holiday | ||
Mon Nov 28 | Accelerate: GPU Arrays |
![]() |
Project Proposal |
Wed Nov 30 | The Lambda Calculus |
![]() |
|
Mon Dec 5 | (Lambda contd.) |
||
Wed Dec 7 | |||
Mon Dec 12 | |||
Wed Dec 21 | Final Project Report and Presentations |
connect4:
Connect 4 AI![]() ![]() ![]() Gregory Fu |
PageRank:
Map-Reduce applications![]() ![]() ![]() Jeremy Carin |
brandon:
Brandon Cruz |
AmazonSearch:
Minimax search for Mancala (CY)![]() ![]() ![]() Chance Onyiorah |
Apriori1:
ECLAT + Max-Miner (CY)![]() ![]() ![]() Daniel Indictor |
Apriori2:
Data Mining: Frequent Itemset (CY)![]() ![]() ![]() Yihan Yin |
autocomplete2:
Parallel Autocomplete (CY)![]() ![]() ![]() Eugene Kim |
BTree:
Sudoku solver (CY)![]() ![]() ![]() Ari An and Xinyao Peng |
CollabFilter:
Item-based Collaborative Filtering (Movie recommendations) (CY)![]() ![]() ![]() Hsing-Wen Hsu |
inf-max:
Hascade: influence maximization problem (CY)![]() ![]() ![]() Yiming Fang |
N-GramAutoComplete:
Predictive Text Autocomplete (CY)![]() ![]() ![]() Sebastian Hereu and Elisa Luo |
ParPriori:
Apriori algorithm (CY)![]() ![]() ![]() Evan Li and Claire Liu |
ParWordle:
Parallel Wordle (CY)![]() ![]() ![]() Zachary Coeur and Sanjay Rajasekharan |
WordHunt:
(CY)![]() ![]() ![]() Allison Liu |
Wordle:
Parallel Wordle Solver (CY)![]() ![]() ![]() ![]() Jennifer Wang |
WordSearch:
Word search in a grid (CY)![]() ![]() ![]() Swetha Shanmugam |
6Degrees:
6 degrees of separation testing (ES)![]() ![]() ![]() ![]() Casey Olsen and Jorge Raad |
AStar:
OSM Parallel A* Search (ES)![]() ![]() Donghan Kim |
BananaSolve:
Bananagram solver (ES)![]() ![]() ![]() Shai Goldman and Aaron Priven |
ConvexHull:
Parallel Convex Hull (ES)![]() ![]() ![]() ![]() Andrei Coman |
Fleet:
Parallel N-Queens (ES)![]() ![]() ![]() Martin Ristovski and Anastasija Tortevska |
MazeSolver:
A* Search Algorithm (ES)![]() ![]() ![]() Reid Jesselson |
PolInc:
Political Inclination in Social Networks (ES)![]() ![]() ![]() Sai Teja Reddy Moolamalla and Vikram Waradpande |
Scrabble:
Word Search (ES)![]() ![]() ![]() Helen Chu and Alexander Lindenbaum |
TSK:
Traveling Salesman with K-Means (ES)![]() ![]() ![]() Matthew Goodman and Ashar Nadeem |
TSP:
Traveling Salesman (ES)![]() ![]() ![]() Trikay Nalamada and Joseph Parker IV |
WordLadder:
Parallel Word Ladder Search (ES)![]() ![]() ![]() Aruj Jain and Benjamin Magid |
Chess:
Chess Position Evaluator (LQ)![]() ![]() ![]() Michael Lee |
Connect4:
Minimax solver for the Connect4 game (LQ)![]() ![]() ![]() Beza Amsalu and Miira Efrem |
Gomoku:
Gomoku solver (LQ)![]() ![]() ![]() Danny Hou |
Go:
The Game of Gomoku (LQ)![]() ![]() ![]() Matthew Retchin |
Kalah:
Min-Max Kalah Game AI (LQ)![]() ![]() ![]() ![]() David Cendejas and Haruki Gonai |
MCTS:
A Library for General Game Playing (LQ)![]() ![]() ![]() Jose Ramos |
ParBoids:
Bird Flight Simulator (LQ)![]() ![]() ![]() Catelen Wu and Ethan Wu |
ParVarys:
Coflow Scheduling (LQ)![]() ![]() ![]() Etesam Ansari and Yunlan Li |
qiang:
Boolean SAT Solver (LQ)![]() ![]() ![]() Wei Qiang |
Vigenere:
Crypto (LQ)![]() ![]() ![]() Alex Nicita |
WebScraper:
(LQ)![]() ![]() ![]() Jack Wang |
YTM:
Yield to Maturity Calculations (LQ)![]() Anjali Smith |
FordFulkerson:
Max-flow Min-cut algorithm (SE)![]() ![]() ![]() Jiayuan Li |
GRNPar:
Gene Regulation Network Inference (SE)![]() ![]() ![]() William Das and Anushka Gupta |
ParBnC:
Integer Linear Program Solver (SE)![]() ![]() ![]() Weixi Zhuo |
Joins:
Parallel Database Joins (SE)![]() ![]() Amery Chang |
Nonollel:
Nonogram Solver (SE)![]() ![]() ![]() Jason Eriksen and Xurxo Riesco Perez |
ParBag:
Bootstrap Aggregation/Bagging learning algorithm (SE)![]() ![]() ![]() Joshua Hahn |
ParticleTrack:
Particle Collider Track Detection (SE)![]() ![]() ![]() Lukas Arnold and Brendan Cunnie |
RandomForest:
ID3 Decision Trees (SE)![]() Shaun Kim |
SubsetConstruction:
Subset Construction: NFA to DFA (SE)![]() ![]() ![]() Alexis Gadonneix and Nikhil Mehta |
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 alone or in pairs. 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