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