![]() |
![]() |
|
COMS W4995 003 Parallel Functional Programming Fall 2020 |
Class meets Mondays, Wednesdays 5:40 - 6:55 PM in Online; see Courseworks.
Name | Office hours | Location | |
---|---|---|---|
Prof. Stephen A. Edwards | sedwards@cs.columbia.edu | F 2-4 | Online |
Shravan Karthik | sk4653@columbia.edu | Th 2-4 | Online |
Benjamin Flin | brf2117@columbia.edu | W 7-9 | Online |
Garrison Grogan | gg2652@columbia.edu | F 5-7 | Online |
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 9 | Introduction Basic Haskell |
![]() ![]() |
|
Mon Sep 14 | Types and Typeclasses |
![]() |
|
Wed Sep 16 | Basic Function Definitions |
![]() |
|
Fri Sep 18 | (no lecture; turn in homework) |
Homework 1
.hs file![]() |
|
Mon Sep 21 | Recursion and Higher Order Functions |
![]() |
|
Wed Sep 23 | (Recursion contd.) |
||
Mon Sep 28 | Using and Defining Modules |
![]() |
|
Wed Sep 30 | User-Defined Types |
![]() |
|
Fri Oct 2 | (no lecture; turn in homework) |
Homework 2
.hs file![]() |
|
Mon Oct 5 | (User-Defined Types contd.) |
||
Wed Oct 7 | (User-Defined Types contd.) |
||
Mon Oct 12 | I/O |
![]() |
|
Wed Oct 14 | Functors |
![]() |
|
Sun Oct 18 | (no lecture; turn in homework) |
Homework 3
.hs file![]() |
|
Mon Oct 19 | (Functors contd.) |
||
Wed Oct 21 | Monads |
![]() |
|
Mon Oct 26 | (Monads contd.) |
||
Wed Oct 28 | (Monads contd.) |
||
Fri Oct 30 | (no lecture; turn in homework) |
Homework 4
.zip file![]() |
|
Mon Nov 2 | Election Day Holiday | ||
Wed Nov 4 | (Monads contd.) |
||
Mon Nov 9 | Lazy and Parallel Evaluation |
![]() |
|
Wed Nov 11 | Strategies |
![]() |
|
Mon Nov 16 | |||
Wed Nov 18 | |||
Sun Nov 22 | (no lecture; turn in homework) |
Homework 5
.zip file![]() |
|
Mon Nov 23 | The Par Monad |
![]() |
|
Tue Nov 24 | (no lecture; turn in proposal) |
Project Proposal | |
Wed Nov 25 | Thanksgiving Holiday | ||
Mon Nov 30 | The Haskell Tool Stack |
![]() |
|
Wed Dec 2 | The Lambda Calculus |
![]() |
|
Mon Dec 7 | |||
Wed Dec 9 | Repa: Regular Parallel Arrays |
![]() |
|
Mon Dec 14 | Accelerate: GPU Arrays |
![]() |
|
Wed Dec 23 | Final Project Report and Presentations |
Backgammon:
Minimax Parallel AI (BF)![]() ![]() ![]() Archit Choudhury and Tejit Pabari |
Hex:
Minimax AI for Game of Hex (BF)![]() ![]() ![]() Eric Feng and Cesar Ramos Jr. |
Minimax:
2048 Game Solver (BF)![]() ![]() ![]() Gabriel Clinger and Matthew Ottomano Jr. |
Nonogram2:
Nonogram Solver (BF)![]() ![]() ![]() Selena Huang and Tian Low |
Nonogram1:
Nonogram Solver (BF)![]() ![]() ![]() Manav Goel and Tanvi Hisaria |
Othello:
Othello Playing AI (BF)![]() ![]() ![]() Bryanna Geiger |
Enigma:
Decryption (GG)![]() ![]() ![]() Samuel Meshoyrer and Evan Mesterhazy |
Life1:
Crossword Generator (GG)![]() ![]() ![]() Gustaf Ahdritz and Lucie Le Blanc |
Life2:
Cellular Automata (GG)![]() ![]() ![]() Eric Jing |
Life3:
Tree Modeling using Space Colonization (GG)![]() ![]() ![]() Justin Kim |
NBody:
Celestial Body Simulator using Barnes-Hut (GG)![]() ![]() ![]() Hans Montero and Rhys Murray |
Gradient:
Gradient Descent Optimizer (SE)![]() ![]() ![]() Riya Chakraborty and Max Helman |
Heat:
Relaxation-based Heat Diffusion Solver (SE)![]() ![]() YungChing Lin and Cody Morrin |
Mandelbrot:
Fractal Generator (SE)![]() ![]() ![]() Declan O'Reilly |
SAT:
Parallel SAT Solver with DPLL (SE)![]() ![]() ![]() Wonhyuk Choi and Andrew de Soler |
Sorting:
Parallel Functional Sorting (SE)![]() ![]() ![]() Benjamin Flin and Jay Karp |
DPLL:
SAT Solver (SE)![]() ![]() ![]() Maxwell Levatich |
AutoComplete:
Word Prediction (SK)![]() ![]() ![]() Shengkai Li and Wenqian Yan |
Bellman-Ford:
Graph Shortest Path (SK)![]() ![]() ![]() Zhe Hua |
SixDegrees:
Longest minimum path in a big graph (SK)![]() ![]() ![]() Darrion Vinson |
Tetris:
Parallel AI Player (SK)![]() ![]() ![]() Trey Gilliland and Derek Zhang |
TFIDF:
Document Keyword Identification (SK)![]() ![]() ![]() Daniel Scanteianu and Yuanhe Ye |
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