This course is a gentle introduction to high performance computing. It would cover the basics of multi-threading, synchronization, concurrent data structures, profiling, and GPU programming. 
Objective
 Introduce fundamentals of high performance computing and develop skills to implement efficient parallel programs. 
Topics
	
    - Why do we need HPC concepts?
    
 - Why shouldn't we wait for a free lunch?
    
 - Issues with Multi-threading?
    
 - What is the role of synchronization primitives?
    
 - How to design a few synchronization primitives?
    
 - What are different synchronization techniques and how to use the techniques?
    
 - What is the need for Concurrent Data Structures and how to design the structures?
    
 - What are the parameters to be considered for measuring the performance of an application?
    
 - How to use different performance monitoring tools?
    
 - What is needed for GPU Programming and how to write a few GPU programs?
    
 - What is the need for Heterogeneous Computing and how to write the progrms?
    
 - How to analyze parallel algorithms? 
	
 
Who should attend?
	
	- Students interested in parallel programming
	
 - Practitioners working with parallel programming models
	
 - Instructors teaching parallel programming and data structures
	
  
 |  |  | 
What do I get from the workshop?
	
	- Understanding of the fundamental principles of concurrency
	
 - Pointers to tools and techniques for practical use
	
 - Possible research topics for further exploration
	
  
After successful completion of the course, an e-certificate will be awarded to each registered participant attending at least 10 out of 12 sessions fully.
  | 
Speakers