![]() |
![]() |
|
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)![]() ![]() ![]() Emily Sillars |
Bingo:
Massively Parallel Bingo (HC)![]() ![]() ![]() Deepakraj Dharmapuri Selvakumar |
Burrows-Wheeler:
String Compression (HC)![]() ![]() ![]() Zulal Ozyer and David Winograd |
FluidDyn:
Liquid Argon Simulator (HC)![]() ![]() ![]() Joheen Chakraborty and Elyas Obbad |
Galaxy:
Galaxy Simulator (HC)![]() ![]() ![]() Minhe Zhang |
gzip:
Compression Algorithm (HC)![]() ![]() ![]() Annie Song |
Okapi:
Okapi BM25 Search Engine Ranking (HC)![]() ![]() ![]() Ian Pan and Han-Ju Tsai |
Particles:
Newtonian Particle Simulator (HC)![]() ![]() ![]() Nathan Cuevas |
Particle-Swarm:
Particle Swarm Optimizer (HC)![]() ![]() ![]() Chen Chen and Xijiao Li |
Trie-Autocomplete:
Autocomplete (HC)![]() ![]() ![]() Thang Nguyen and Siddharth Pittie |
TSP:
Traveling Salesman Problem (HC)![]() ![]() ![]() Siddharth Bhutoria and Jainam Shah |
Word-Search:
Word Find in a grid (HC)![]() ![]() ![]() Soamya Agrawal and Anshit Shirish Chaudhari |
Autocomplete:
Autocomplete Dictionary System (HZ)![]() ![]() ![]() Michael Jan and Maylis Whetsel |
Autocomplete2:
Autocomplete Dictionary System (HZ)![]() ![]() ![]() Vikrant Satheesh Kumar and Aswin Tekur Srinivasamurthy |
Exact-Cover:
NP-Complete Problem (HZ)![]() ![]() ![]() Fangxin Lin and Xinxin Zhao |
GenAlgo:
Genetic Algorithm on N-Queens (HZ)![]() ![]() ![]() Pedro Barbosa Teixeira Santos and Jacob Fisher |
Genetic-8-Queens:
Genetic Algorithm for 8-Queens (HZ)![]() ![]() ![]() Zhangyi Pan and Shuhong Zhang |
Magic-Squares:
Magic Square Solver (HZ)![]() ![]() ![]() Cynthia Zhang and Zijian Zhang |
Maze:
Graph Traversal (HZ)![]() ![]() ![]() Boxiong Kong |
Maze-Solver:
Graph Traversal (HZ)![]() ![]() ![]() Linyu Li and Yanhao Li |
Minimum-Spanning-Tree:
Graph Search (HZ)![]() ![]() ![]() Hsuan-Ru Yang |
N-Puzzle:
N-Puzzle grid solver (HZ)![]() ![]() ![]() Yuxuan Luo and Zhonglin Yang |
N-Queens:
N-Queens Solver (HZ)![]() ![]() ![]() Alexandra Holguin |
NQueens:
N-Queens Solver (HZ)![]() ![]() ![]() Qiao Huang |
ParallelFlow:
Flow Free Routing Problem Solver (HZ)![]() ![]() ![]() Kidus Mulu and Deji Oyerinde |
ParFifteenPuzzle:
Fifteen Puzzle Solver (HZ)![]() ![]() ![]() Kuan-Yao Huang and Aditya Sidharta |
Apriori:
Apriori Data Mining Algorithm (MH)![]() ![]() ![]() ![]() Hongfei Chen |
Decision-Trees:
Machine Learning (MH)![]() ![]() ![]() Phan Anh Nguyen and Azhaan Zahabee |
EpiSimdemics:
Spread of Infections over Social Networks (MH)![]() ![]() ![]() ![]() Andrew Schreiber |
MPdist:
Matrix Profile Distance Metric (MH)![]() ![]() ![]() Asif Mallik |
MRC:
Miss-Ratio Curves for Cache Simulation (MH)![]() ![]() ![]() Jeffrey Tao and Kaylee Trevino |
MultPoly:
Polynomial Multiplication (MH)![]() ![]() ![]() Yaxin Chen |
Palindrome:
Palindrome Partitioning (MH)![]() ![]() ![]() Jesse Chong |
PFP:
Floyd-Warshall Paths (MH)![]() ![]() ![]() Pelin Cetin |
PowerList:
Parallel List (MH)![]() ![]() ![]() Yash Datta |
Rubiks-Func:
Rubik's Cube Solver (MH)![]() ![]() ![]() Yash Ashok Agarwal and Chandrashekhar Dhulipala |
WordEmb:
Word Embeddings (MH)![]() ![]() ![]() Erik Huang and Yifan Yang |
YAX:
Cross-Referencing (MH)![]() ![]() ![]() Xuheng Li |
Alpha-Beta-2048:
Alpha-Beta Pruning for the 2048 Game (ML)![]() ![]() ![]() Unal Yigit Ozulku |
BoolSat:
Boolean Satisfiability Solver (ML)![]() ![]() ![]() Kenneth Kiprotich |
Dots-and-Boxes:
Minimax Game Solver (ML)![]() ![]() ![]() Sitong Feng and Yuyan Ke |
Expectimax:
2048 Puzzle Solver (ML)![]() ![]() ![]() Yufan Chen |
Expectminimax:
2048 Puzzle Solver (ML)![]() ![]() ![]() Matthew Broughton and Kent Hall |
Gomoku:
Minmax Gomoku Player (ML)![]() ![]() ![]() Yunkai Zhu |
Gomokururu:
Minmax Gomoku Player (ML)![]() ![]() ![]() Andreas Cheng and Kaiwen Xue |
Minesweeper:
Minesweeper Player (ML)![]() ![]() ![]() Haoxiang Zhang |
ParSAT:
Boolean Satisfiability Solver (ML)![]() ![]() ![]() Tamer Eldeeb |
PM:
Minimax solver (ML)![]() ![]() ![]() Feitong Qiao and Yuanyuting Wang |
Ptcls:
N-Body Simulator (ML)![]() ![]() ![]() Rong Bai |
SeedCracker:
Minecraft (ML)![]() ![]() ![]() Justin Chen and Federick Gonzalez |
PMinimax:
Minimax Solver (ML)![]() ![]() ![]() Jeeho Song |
Hangman:
Hangman Player AI (SE)![]() ![]() ![]() Anthony Pitts |
Life:
Conway's Game of Life (SE)![]() ![]() ![]() Peter Chen |
Mastermind:
Mastermind Player (SE)![]() ![]() ![]() Xinhao Su and David Xu |
ParBC:
Betweeness Centrality Algorithm (SE)![]() ![]() ![]() Rui Qiu and Hao Zhou |
Par-Grep:
Parallel Word Search (SE)![]() Benjamin Snyder |
ParHuff:
Huffman Encoding Decoding (SE)![]() ![]() ![]() Malcolm Mashig |
ParLife:
Conway's Game of Life (SE)![]() ![]() ![]() Adam Fowler |
ParRE:
String Matching (SE)![]() ![]() ![]() Eumin Hong and Christopher Yoon |
PGraphColor:
Genetic Graph Coloring (SE)![]() ![]() ![]() Milen Ferev |
Sudoku:
Parallel SAT Solver (SE)![]() ![]() ![]() Yian Yu |
WordLadder:
Word Ladder Problem Solver (SE)![]() ![]() ![]() 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