This course covers programming methodologies for solving fundamental engineering problems using algorithms with pervasive application across disciplines. Overview of computer systems from a programming perspective including processor architectures, memory hierarchies, machine arithmetic, and performance tuning techniques. Algorithms include iterative, direct linear solvers, fft, and divide and conquer strategies for n-body problems. Software development; other practical UNIX tools including shell scripting, vi/emacs, gcc, make, gdb, gprof, version control systems and LaTeX.
Monday, Wednesday, Friday, 11:00am - 12:15pm
Lane History Corner, 200-203
We will be using Piazza to send announcements and as a discussion board for the homework projects. Please use this if you have questions regarding course material.
Instructor: Nick Henderson, ICME ()
TA: Stephen Kemmerling, ICME ()
TA: Alex Shkolnik, ICME ()
Office Hours: MWF at 12:15pm in classroom 200-203
The calendar (below) shows when assignments will be given.
Assignments are due just before the subsequent one is assigned.
Each student is allowed a total 4 late days over the quarter. The late days may be used on the assignments and tutorials, but not the final. After exhaustion of the late days, assignments will be penalized 20% per day.
Assignments will be submitted via a script on corn.stanford.edu. There will be instructions in the assignment handouts, but it is a good idea to familiarize yourself with Stanford's unix computing environments.
We expect your codes to compile and run on corn.stanford.edu, however you are welcome to develop, test, and profile your codes where you like. We will ask that you describe your testing environment in the write ups that will be associated with the assignments.
Slides for cme212 lectures will be linked here. Students are welcome to look over the programming slides from cme211 here.
LaTeX Tutorial, due Wednesday, Jan 18 at 5pm. (tex) (makefile) (slides)
Asssigment 1, due Wednesday, Feb 1 at 5pm. (tex)
GDB/Valgrind tutorial
Steganography tutorial
Asssigment 2, due Wednesday, Feb 15 at 5pm. (stego.tar.gz)
Asssigment 3, due Wednesday, Feb 29 at 5pm. (nbody.tar.gz)
Assignment 4, due Friday, Mar 9 in class. (tex) (solutions)
Assignment 5, due Friday, Mar 16 at 5pm. (matcomp.tar.gz)
Parallelization overview
Python introduction
Final, due Friday, Mar 23 at 5pm. (stock data) (pdf)
Download with: git clone https://github.com/nwh/final.git
Week 1: Chapters 1 and 2 of The Not So Short Introduction to LaTeX
Week 2: Essential C and Pointers and Memory
Week 3:
Week 4: Chapter 1 from High Performance Computing
Week 6:
Week 7: Chapter 2 of High Performance Computing
Week 8: Sections 1-5 of How to Write Fast Numerical Code: A Small Introduction, linked below.
Week 9: The MapReduce paper linked below.
This list will be expanded during the quarter.
C. Severance & K. Dowd, High Performance Computing. (pdf) (epub) (print) [CS]
D. Goldberg, What every computer scientist should know about floating-point arithmetic, ACM Computing Surveys, 1991. (html) (pdf, appendix D)
Website of W. Kahan, primary architect behind IEEE 754-1985.
Matrix Computations
Optimization
The C programming language:
Development tools:
TeX references & material:
Unix & Linux references:
EMACS
Interest
Please report broken links.
PuTTY: A Free Telnet/SSH Client (for Windows).
Xming. An X11 server for Windows.
Aquamacs. An Emacs GUI for Mac OS X.
Org-mode for Emacs.
|------------------+-----------------------------+----------------| | <2012-01-09 Mon> | course intro | | | <2012-01-11 Wed> | architecture intro | | | <2012-01-13 Fri> | latex tutorial | latex tutorial | |------------------+-----------------------------+----------------| | <2012-01-16 Mon> | MLK day, no classes | | | <2012-01-18 Wed> | C programming I | assignment 1 | | <2012-01-20 Fri> | C programming II | | |------------------+-----------------------------+----------------| | <2012-01-23 Mon> | tools I | | | <2012-01-25 Wed> | | | | <2012-01-27 Fri> | tools II | | |------------------+-----------------------------+----------------| | <2012-01-30 Mon> | representation I | | | <2012-02-01 Wed> | | assignment 2 | | <2012-02-03 Fri> | representation II | | |------------------+-----------------------------+----------------| | <2012-02-06 Mon> | testing & verification | | | <2012-02-08 Wed> | | | | <2012-02-10 Fri> | timing & performance | | |------------------+-----------------------------+----------------| | <2012-02-13 Mon> | architecture I | | | <2012-02-15 Wed> | | assignment 3 | | <2012-02-17 Fri> | architecture II | | |------------------+-----------------------------+----------------| | <2012-02-20 Mon> | President's day, no classes | | | <2012-02-22 Wed> | optimization I | | | <2012-02-24 Fri> | optimization II | | |------------------+-----------------------------+----------------| | <2012-02-27 Mon> | linear algebra I | | | <2012-02-29 Wed> | | assignment 4 | | <2012-03-02 Fri> | linear algebra II | | |------------------+-----------------------------+----------------| | <2012-03-05 Mon> | C-fortran interface | | | <2012-03-07 Wed> | | assignment 5 | | <2012-03-09 Fri> | python | | |------------------+-----------------------------+----------------| | <2012-03-12 Mon> | matlab mex interface | | | <2012-03-14 Wed> | | | | <2012-03-16 Fri> | course review | final | |------------------+-----------------------------+----------------| | <2012-03-19 Mon> | finals period start | | | <2012-03-23 Fri> | finals period end | final due | |------------------+-----------------------------+----------------|
The current version of this course combines the hard work and insight of several people:
Professor James Lambers taught the course many times. The overall structure and lectures come from his design.
Emmet Caulfield taught the course in 2009.
Chris Maes was a CA one year and provided helpful notes and bits of code.
There are probably more!