Spring 2016

ACMS 40212/60212: Advanced Scientific Computing

Class time: MWF 9:25am - 10:15am.

Classroom: 200 Riley Hall

Office hours: M 12:00 pm - 1:30pm, 242HH

Course Syllabus

UNIX Tutorials
  • To learn about basics of C programming, the website ANSI C for Programmers on UNIX Systems and the document ANSI C for Programmers on UNIX Systems (pdf file) are good starting places.

    This short introduction will get you started on the vi editor. For those who wish additional information, here is a link.

    Unix command
  • ls --- list files and directories
  • cd --- cd dirname -- change directory
  • mv --- mv filename1 filename2 -- change file name or move a file into a different directory
  • rm --- rm filename -- delete a file
  • pwd --- show path of current directory
  • cp --- cp filename1 filename2 -- copies a file
  • mkdir --- mkdir dirname -- make a new directory
  • more --- more filename -- shows the first part of a file, just as much as will fit on one screen. Just hit the space bar to see more or q to quit.
    Ctags is a tool that makes easy to navigate large source code. Ctags also supports many languages besides C and C++.

    Ctags with Vim

    1. cd to the "root" directory of the code.

    2. Run Ctags recursively over the entire code directories to generate the tags file. On Linux, use the following command:

      ctags -R *
    3. To search for a specific tag and open Vim to its definition, run the following command in the shell:

      vim -t <tag>
    4. Or, open any source file in Vim under the directory where the tagfile is located, and use the following basic commands:

      Keyboard command



      Jump to the tag underneath the cursor


      Jump back up in the tag stack

      :ts <tag> <RET>

      Search for a particular tag


      Go to the next definition for the last tag


      Go to the previous definition for the last tag


      List all of the definitions of the last tag

    Copying files

    You may need to move files between machines .




  • A. Grama, G. Karypis, V. Kumar and A. Gupta, Introduction to Parallel Computing, Second Edition has been put on reserve in Math. library. The electronic version is also available online at http://link.library.nd.edu/rplow (please contact Math. librarian for access if there is a problem)
  • Sample code is at /afs/crc.nd.edu/user/z/zxu2/Public/ACMS40212 on crc machine.

    Projects and Homework Assignments
    01/25 Project 1 description (due on 02/12): Use the sample code provided in ~zxu2/Public/Proj1/proj1_file_io.c to implement a code which converts mesh data generated by easymesh to vtk format and display in paraview. Sample vtk mesh files are: red blood cell ; 2D unstructured mesh
    TBA Project 2 description (due date: 03/04)
    TBA Project 3 description (due date: 04/04)
    TBA Project 4 description (due date: 05/02) Homework

    Final Projects (subject to change) Final Project Guidelines
    Presentation of Final Projects: 05/04/2016, 8:00am, 200 Riley Hall
    All-pairs Shortest Path Problem (Undergraduate students only)
    Document Classification (Undergraduate students only)
    Monte Carlo Simulation of Buffon's needle problem using GPU (Undergraduate students only) Matlab code of the Monte Carlo Simulation
    Bacterial branching growth using diffusive Fisher equations with a cutoff
    Kinetic Monte Carlo simulation using OpenMP
    Implementing red-black Gauss Seidel to solve 2D Laplace equation on GPUs
    Implementing 2D (explicit) high-order accurate finite difference/volume/element method for time dependent PDEs on GPU or using MPI (Choose a PDE you are familiar with)
    Accelerating numerical solution of Stochastic Differential Equations with CUDA
    Cellular Automata for reaction-diffusion

    Lecture notes
    Lecture 01 Computer Organization
    Lecture 01.1 Short notes on C++ , Short Introduction to Makefile Pointers (from cplusplus.com), Pointer and Memory (Notes from Stanford)
    Additional Reading Software Pipelining of Nested Loops Rixner etal, Memory access scheduling Best practices for scientific computing
    Additional Reading Tips for writing clean code Debugging in Serial and Parallel
    Lecture 02 Parallel programming platforms
    Lecture 03 Message-Passing Programming Using MPI (Part 1), (Part 2) Introduction to C/C++ MPI and PBS
    Lecture 04 Principles of Parallel Algorithm Design
    Lecture 05 Parallel Matrix Algorithms (part 1), (part 2), (part 3)
    Lecture 06 Performance Analysis
    Lecture 07 Advanced MPI - process topology
    Lecture 7 GPU Programming Inter-Block Synchronization
    GPU programming from nvidia developer centers Introduction to GPU Computing , CUDA C Programming Guide , CUDA C Programming Guide (Version 7.5) , CURAND
    Lecture 08 Fast Linear Solvers (part 1) , (part 2) , (part 3) , (part 4) , (part 5) , (part 6)
    Lecture 09 Numerical PDEs
    OpenMP notes OpenMP Programming