COMS W4995 002 Parallel Functional Programming Fall 2021 |
Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 633 Modd.
Name | Office hours | Location | |
---|---|---|---|
Prof. Stephen A. Edwards | sedwards@cs.columbia.edu | ||
Max Levatich | ml4553@columbia.edu | W 8:30 P - 10:30 P | Mudd 122 TA Room |
Max Helman | mhh2148@columbia.edu | Th 10 A - 12 P | Online |
Wonhyuk (Harry) Choi | wc2737@columbia.edu | T 1:30 - 3:30 | CS Courtyard |
Hao Zhou | hz2754@columbia.edu | F 8-10 AM | 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 |
---|---|---|---|
Mon Sep 13 | Introduction Basic Haskell |
|
|
Wed Sep 15 | Types and Typeclasses |
|
|
Mon Sep 20 | Basic Function Definitions |
|
|
Wed Sep 22 | Recursion and Higher Order Functions |
|
|
Sun Sep 26 | (no lecture; turn in homework) |
Homework 1 .hs file | |
Mon Sep 27 | (Recursion contd.) |
||
Wed Sep 29 | Using and Defining Modules |
|
|
Mon Oct 4 | User-Defined Types |
|
|
Wed Oct 6 | (User-Defined Types contd.) |
||
Sun Oct 10 | (no lecture; turn in homework) |
Homework 2 .hs file | |
Mon Oct 11 | (User-Defined Types contd.) |
||
Wed Oct 13 | I/O |
|
|
Mon Oct 18 | Functors |
|
|
Wed Oct 20 | (Functors contd.) |
||
Sun Oct 24 | (no lecture; turn in homework) |
Homework 3 .hs file | |
Mon Oct 25 | Monads |
|
|
Wed Oct 27 | (Monads contd.) |
||
Mon Nov 1 | Election Day Holiday | ||
Wed Nov 3 | (Monads contd.) |
||
Sun Nov 7 | (no lecture; turn in homework) |
Homework 4 .zip file | |
Mon Nov 8 | Lazy and Parallel Evaluation |
|
|
Wed Nov 10 | Strategies |
|
|
Mon Nov 15 | (Strategies contd.) |
||
Wed Nov 17 | (Strategies contd.) |
||
Sun Nov 21 | (no lecture; turn in homework) |
Homework 5 .zip file | |
Mon Nov 22 | The Par Monad The Haskell Tool Stack |
|
|
Mon Nov 22 | Project Proposal | ||
Wed Nov 24 | Thanksgiving Holiday | ||
Mon Nov 29 | Repa: Regular Parallel Arrays |
|
|
Wed Dec 1 | Accelerate: GPU Arrays |
|
|
Mon Dec 6 | The Lambda Calculus |
|
|
Wed Dec 8 | (Lambda contd.) |
||
Mon Dec 13 | |||
Wed Dec 22 | Final Project Report and Presentations |
AAC:
ASCII Animation Converter (HC) Proposal Report Files Emily Sillars |
Bingo:
Massively Parallel Bingo (HC) Proposal Report Files Deepakraj Dharmapuri Selvakumar |
Burrows-Wheeler:
String Compression (HC) Proposal Report Files Zulal Ozyer and David Winograd |
FluidDyn:
Liquid Argon Simulator (HC) Proposal Report Files Joheen Chakraborty and Elyas Obbad |
Galaxy:
Galaxy Simulator (HC) Proposal Report Files Minhe Zhang |
gzip:
Compression Algorithm (HC) Proposal Report Files Annie Song |
Okapi:
Okapi BM25 Search Engine Ranking (HC) Proposal Report Files Ian Pan and Han-Ju Tsai |
Particles:
Newtonian Particle Simulator (HC) Proposal Report Files Nathan Cuevas |
Particle-Swarm:
Particle Swarm Optimizer (HC) Proposal Report Files Chen Chen and Xijiao Li |
Trie-Autocomplete:
Autocomplete (HC) Proposal Report Files Thang Nguyen and Siddharth Pittie |
TSP:
Traveling Salesman Problem (HC) Proposal Report Files Siddharth Bhutoria and Jainam Shah |
Word-Search:
Word Find in a grid (HC) Proposal Report Files Soamya Agrawal and Anshit Shirish Chaudhari |
Autocomplete:
Autocomplete Dictionary System (HZ) Proposal Report Files Michael Jan and Maylis Whetsel |
Autocomplete2:
Autocomplete Dictionary System (HZ) Proposal Report Files Vikrant Satheesh Kumar and Aswin Tekur Srinivasamurthy |
Exact-Cover:
NP-Complete Problem (HZ) Proposal Report Files Fangxin Lin and Xinxin Zhao |
GenAlgo:
Genetic Algorithm on N-Queens (HZ) Proposal Report Files Pedro Barbosa Teixeira Santos and Jacob Fisher |
Genetic-8-Queens:
Genetic Algorithm for 8-Queens (HZ) Proposal Report Files Zhangyi Pan and Shuhong Zhang |
Magic-Squares:
Magic Square Solver (HZ) Proposal Report Files Cynthia Zhang and Zijian Zhang |
Maze:
Graph Traversal (HZ) Proposal Report Files Boxiong Kong |
Maze-Solver:
Graph Traversal (HZ) Proposal Report Files Linyu Li and Yanhao Li |
Minimum-Spanning-Tree:
Graph Search (HZ) Proposal Report Files Hsuan-Ru Yang |
N-Puzzle:
N-Puzzle grid solver (HZ) Proposal Report Files Yuxuan Luo and Zhonglin Yang |
N-Queens:
N-Queens Solver (HZ) Proposal Report Files Alexandra Holguin |
NQueens:
N-Queens Solver (HZ) Proposal Report Files Qiao Huang |
ParallelFlow:
Flow Free Routing Problem Solver (HZ) Proposal Report Files Kidus Mulu and Deji Oyerinde |
ParFifteenPuzzle:
Fifteen Puzzle Solver (HZ) Proposal Report Files Kuan-Yao Huang and Aditya Sidharta |
Apriori:
Apriori Data Mining Algorithm (MH) Proposal Report Files Hongfei Chen |
Decision-Trees:
Machine Learning (MH) Proposal Report Files Phan Anh Nguyen and Azhaan Zahabee |
EpiSimdemics:
Spread of Infections over Social Networks (MH) Proposal Report Files Andrew Schreiber |
MPdist:
Matrix Profile Distance Metric (MH) Proposal Report Files Asif Mallik |
MRC:
Miss-Ratio Curves for Cache Simulation (MH) Proposal Report Files Jeffrey Tao and Kaylee Trevino |
MultPoly:
Polynomial Multiplication (MH) Proposal Report Files Yaxin Chen |
Palindrome:
Palindrome Partitioning (MH) Proposal Report Files Jesse Chong |
PFP:
Floyd-Warshall Paths (MH) Proposal Report Files Pelin Cetin |
PowerList:
Parallel List (MH) Proposal Report Files Yash Datta |
Rubiks-Func:
Rubik's Cube Solver (MH) Proposal Report Files Yash Ashok Agarwal and Chandrashekhar Dhulipala |
WordEmb:
Word Embeddings (MH) Proposal Report Files Erik Huang and Yifan Yang |
YAX:
Cross-Referencing (MH) Proposal Report Files Xuheng Li |
Alpha-Beta-2048:
Alpha-Beta Pruning for the 2048 Game (ML) Proposal Report Files Unal Yigit Ozulku |
BoolSat:
Boolean Satisfiability Solver (ML) Proposal Report Files Kenneth Kiprotich |
Dots-and-Boxes:
Minimax Game Solver (ML) Proposal Report Files Sitong Feng and Yuyan Ke |
Expectimax:
2048 Puzzle Solver (ML) Proposal Report Files Yufan Chen |
Expectminimax:
2048 Puzzle Solver (ML) Proposal Report Files Matthew Broughton and Kent Hall |
Gomoku:
Minmax Gomoku Player (ML) Proposal Report Files Yunkai Zhu |
Gomokururu:
Minmax Gomoku Player (ML) Proposal Report Files Andreas Cheng and Kaiwen Xue |
Minesweeper:
Minesweeper Player (ML) Proposal Report Files Haoxiang Zhang |
ParSAT:
Boolean Satisfiability Solver (ML) Proposal Report Files Tamer Eldeeb |
PM:
Minimax solver (ML) Proposal Report Files Feitong Qiao and Yuanyuting Wang |
Ptcls:
N-Body Simulator (ML) Proposal Report Files Rong Bai |
SeedCracker:
Minecraft (ML) Proposal Report Files Justin Chen and Federick Gonzalez |
PMinimax:
Minimax Solver (ML) Proposal Report Files Jeeho Song |
Hangman:
Hangman Player AI (SE) Proposal Report Files Anthony Pitts |
Life:
Conway's Game of Life (SE) Proposal Report Files Peter Chen |
Mastermind:
Mastermind Player (SE) Proposal Report Files Xinhao Su and David Xu |
ParBC:
Betweeness Centrality Algorithm (SE) Proposal Report Files Rui Qiu and Hao Zhou |
Par-Grep:
Parallel Word Search (SE) Proposal Benjamin Snyder |
ParHuff:
Huffman Encoding Decoding (SE) Proposal Report Files Malcolm Mashig |
ParLife:
Conway's Game of Life (SE) Proposal Report Files Adam Fowler |
ParRE:
String Matching (SE) Proposal Report Files Eumin Hong and Christopher Yoon |
PGraphColor:
Genetic Graph Coloring (SE) Proposal Report Files Milen Ferev |
Sudoku:
Parallel SAT Solver (SE) Proposal Report Files Yian Yu |
WordLadder:
Word Ladder Problem Solver (SE) Proposal Report Files Yiqu Liu and Daisy Wang |
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