Stephen A. Edwards Columbia University Crown
COMS W4995 002
Parallel Functional Programming
Fall 2021

General Information

Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 633 Modd.

Staff

Name Email 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

Overview

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.

Schedule

Date Lecture Notes Due
Mon Sep 13 Introduction
Basic Haskell
pdf
pdf
Wed Sep 15 Types and Typeclasses
pdf
Mon Sep 20 Basic Function Definitions
pdf
Wed Sep 22 Recursion and Higher Order Functions
pdf
Sun Sep 26 (no lecture; turn in homework)
Homework 1 .hs filehw1.hs
Mon Sep 27 (Recursion contd.)
Wed Sep 29 Using and Defining Modules
pdf
Mon Oct 4 User-Defined Types
pdf
Wed Oct 6 (User-Defined Types contd.)
Sun Oct 10 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 11 (User-Defined Types contd.)
Wed Oct 13 I/O
pdf
Mon Oct 18 Functors
pdf
Wed Oct 20 (Functors contd.)
Sun Oct 24 (no lecture; turn in homework)
Homework 3 .hs filehw3.hs
Mon Oct 25 Monads
pdf
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 filehw4.zip
Mon Nov 8 Lazy and Parallel Evaluation
pdf
Wed Nov 10 Strategies
pdf
Mon Nov 15 (Strategies contd.)
Wed Nov 17 (Strategies contd.)
Sun Nov 21 (no lecture; turn in homework)
Homework 5 .zip filehw5.zip
Mon Nov 22 The Par Monad
The Haskell Tool Stack
pdf
pdf
Mon Nov 22 Project Proposal
Wed Nov 24 Thanksgiving Holiday
Mon Nov 29 Repa: Regular Parallel Arrays
pdf
Wed Dec 1 Accelerate: GPU Arrays
pdf
Mon Dec 6 The Lambda Calculus
pdf
Wed Dec 8 (Lambda contd.)
Mon Dec 13
Wed Dec 22 Final Project Report and Presentations

Teams

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

star My favorites

The Project

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:

  1. A one- or two-page proposal that gives the TAs and me an inda of what you plan to do so we can give you feedback about restricting or increasing the scope. Upload a PDF file to Courseworks describing your project and team members, if any.
  2. A report describing your project: what you implemented and how, some performance figures indicating how much better your solution runs in parallel (e.g., time its execution on one core and compare that to running it on multiple cores), and a full listing of the code you wrote. Upload a multi-page PDF file to Courseworks; due during Finals Week.
  3. Along with your report, submit a .tar.gz file including the code and test cases for your project. Make it so I can compile and run it, perhaps by including a README file with instructions for running it with the Haskell Stack. Due with the repot.

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

Resources

Links