The University of Western Ontario
	London, Canada
      
      Department of Computer Science
      CS4402B/CS9635B -- Parallel and Distributed Computing  
      Winter 2024
     
    Course Description
    
The efficient usage of parallel and distributed systems 
(multi-processors and computer networks) is nowadays 
an essential task for computer scientists. 
This course studies the fundamental aspects of 
parallel systems and aims at providing  an integrated view of the various 
facets of software development on such systems: 
hardware architectures, 
programming languages and models, 
software development tools, 
software engineering concepts and design patterns, 
performance modelling and analysis, 
experimenting and measuring,
application to scientific computing.
Course topics may include but are not limited to: 
hierarchical memory, cache complexity, 
multi-core and many-core architectures, 
fork-join parallelism, scheduling, 
scalability, GPU computing, data parallelism, pipelining, 
message passing (MPI), parallel and distributed data-structures, 
and applications of parallel and distributed computing. 
Follow this link for various resources 
(software tools and tutorials, hardware documentation, 
conferences, other HPC course web sites, etc.)
regarding 
this course and HPC in general. 
    Instructor
    
      
	| Name: | Marc Moreno-Maza | 
      
	| Office: | MC 327 | 
      
	| Office Hours: | Wednesdays 15:30 - 17:30 on
	             Zoom | 
      
	| Email: | moreno@csd.uwo.ca | 
    
    Delivery mode, lecture Notes and Textbook
  The format of the course lectures and tutorials will be on-line asynchronous
  presentations posted on the OWL web sites.
  Office hours will be one-line synchronous meetings on Zoom.
  The office hours will not be recorded.
          The following textbooks are recommended but not required:
           
	     -  
Structured Parallel Programming  
by Michael McCool, Arch Robison, James Reinder.
	     
- 
	       C++ Concurrency
in Action, practical multithreading   
	       by Anthony Williams
	     
- 
Programming language pragmatics (Chapter 12 only) by Michael L. Scott
	     
- 
	       Models of Computation Exploring the Power of Computing  by John E. Savage.
               
- 
	       CUDA by example  by JASON SANDERS and EDWARD KANDROT.
             
OWL Website
    
      The course web site is accessible here
   	
    For CS4402,  the OWL web site is
here.  
    
      For CS9635, the OWL web site is
here.  
    
    
      Please check both the course and OWL sites often for updates on lecture notes and errata, as well as the
      forum discussions and announcements in the OWL web sites.
   Course outline
   Please find the  course outline
       here.
         Lecture Topics
    
      The list of topics will be something on the order of:
    
    
      - 
	Overview of parallel and distributed computing
      
- 
       Programming patterns in parallel and distributed computing;
       illustration with Julia
      
- 
	Hierarchical memories, cache complexity
      
- 
	The fork-join model and the cilk concurrency platform
      
- 
	Multi-threading parallelism and performance
      
- 
         Pipelining 
	
- 
	Scheduling and Synchronizing; parallelism overheads
      
- 
         Parallel Random-Access Machines.
      
- 
	Many-core programming (GPGPUs)
      
- 
	High-Performance Computing with CUDA
      
- 
        Multiprocessed parallelism, message passing (MPI)
      
Lecture Materials
    
      The list of topics will be something on the order of:
    
    
    
      - 
	Overview of parallel and distributed computing 
      
- 
       Parallel and distributed patterns in Julia:
	-   Simple installation notes for Jupyter and Julia  
-   Jupyter notebooks illustrating parallel programming patterns in Julia    
 
- 
	Hierarchical memories, cache complexity
	Extra materials used in the lectures:
	  
	-  Animation of naive counting sort  
-  Animation of counting sort using buckets  
-   Animation of  various transposition algorithms 
-  C programs for matrix multiplication, matrix transposition and counting sort. 
 
- 
	    The fork-join model and the cilk concurrency platform
	Extra materials used in the lectures:
	
        -   The OpenCilk web site   
-  OpenCilk examples    
 
- 
         Dependence Analysis and (Automatic) Parallelization
	
- 
Many-core Computing with CUDA.
slides 
	
- 
	Parallel Random-Access Machines
         
      
-  High-Performance Computing with CUDA
slides.
       
- 
	Programming parallel patterns with C++ 11
slides 
      
- 
        Multiprocessed parallelism, message passing (MPI):
	
- 
	  A Comprehensive MPI Tutorial Resource   
- 	MPI intro lecture by Jon Eyolfson,   
- 	MPI: Beyond the Basics by David McCaughan.   
 
-  MetaFork: A Compilation Framework for
Concurrency Platforms Targeting Multicores
	slides
      
Class Schedule
    The materials (slides, recordings and other resources)
    of each lecture topic will be made available to the students in the course
    of Monday of each week of class, except for the reading week and
    the last week of classes.
    
  Those materials will be accessible on the OWL web sites.
     Slides will also be posted on the public web site of the course.
    
      Each student is expected to watch all the lecture recordings.
      Reading the slides may not be sufficient to fully comprehend
      the materials.
    
    Assignment/Project/Quiz Schedule
    
      All dates are tentative and currently subject to change, although it is
      doubtful by any significant amount.
    
    
      
	| Evaluation Technique | Weight | Posted Date (tentative!) | Due Date (tentative!) | Workload | 
	| Assignment  One | 1/6 | Jan. 31 | Feb. 29 | regular | 
      
      
	| Assignment Two | 1/6 | March 5 | March 28 | regular | 
      
	| Project | 1/3 | Feb 29 | See course outline | heavy | 
      
	| Quizzes | 1/9 each | N/A | various | N/A | 
    
    
    Problem Sets for 2023-2024 
 
 
    
    Quiz corrections from 2014-2015 
 
Quiz 1: elements of corrections for a 2014 quiz. 
 
A CUDA quiz  and its 
 elements of correction.  
 
2015 Quiz 2 with elements of corrections.  
 
    Quiz corrections from 2016-2017 
 
Quiz 1 with elements of corrections. 
 
Quiz 2 with elements of corrections. 
    Research articles proposed for the CS4402 projects  in 2023-2024
      Please find below papers that can be chosen for the course projects
          of CS4402.
      
   
    Research projects proposed for the CS9635 in 2023-2024
      Please find topics that can be chosen for the course projects
          of CS9635.
      
	-  The polyhedral model in for-loop nestv optimization (literaure review
	  and algorithm comparison) starrting with this 
	paper   
        and that 
	    paper   
	
      
-  Sorting algorithms in CUDA (literaure review and comparative 
                                         experimentation)  starrting with the 
         paper   
      
-  prefix sum algorithms in CUDA (literaure review and comparative experimentation)
	  starting with 
        wikipedia  
        and  this
       paper  (selected)  
      
    Marc Moreno Maza
Last modified: Mon Jan 10, 2022