High-Performance Computing Fundamentals




This course provides in-depth coverage of high-performance application development and design using Microsoft Windows HPC Server 2008. Intended for both commercial developers and academic researchers, our goal is to quickly bring attendees up to speed on the design and development of 64-bit parallel codes. Attendees learn to take full advantage of modern high-performance clusters, from running simple parametric sweeps to developing multi-core, multi-node apps using OpenMP, PFx, WCF, MPI, and MPI.NET. Discussion includes numerous practical considerations, including data distribution and collection, debugging, tracing, porting, performance tuning, visualization, and customizing the client-side submission process via HPC Server’s API. The course follows a lecture/lab format, providing every attendee with hands-on development experience using a high-performance cluster.


Who Should Attend

Business developers, scientific programmers, and academic researchers interested in high-performance computing on the Windows platform.


Download printable course description Download printable course description

course details


Technologies: Windows HPC Server 2008, OpenMP, PFx, MPI, MPI.NET, WCF, SUA, Excel Services
Language(s): Visual C++, C#
Length: Five days, 9am-5pm
US Class Price: $2995
UK Class Price: $3395

course instructors


Dr. Joe Hummel



Course outline:

Day 1

  Introduction to High-Performance Computing with Microsoft Windows HPC Server 2008 - What is HPC
- What is Microsoft Windows HPC Server 2008
- Clusters vs. Grids
- Common types of parallelism: task, data, and pipeline
- Developing and running cluster applications
- Measuring and predicting performance: speedup, Amdahl's law
- Examples, examples, examples

  Introduction to Concurrent Programming on Windows - Anatomy of processes and threads
- Fork-join parallelism
- Multi-threading use-cases
- Multi-threading using the Windows API
- Working with threads
- Multi-threading caveats

  Concurrency and Synchronization - Why we need synchronization
- Critical sections and race conditions
- Atomic updates
- Locking
- Barriers
- Deadlock and deadlock avoidance

Day 2

  Working and Interfacing with Windows HPC Server - Architecture of HPC Server
- Executive summary of cluster setup
- Working with HPC Server
- Scheduling jobs and tasks
- Security and manageability
- HPC Server API
- Interfacing with HPC Server via the API

  Introduction to OpenMP --- Open Multi-Processing - What is OpenMP?
- Shared-memory programming
- Using OpenMP in Visual Studio
- Parallel regions
- Execution model
- Task, loop and data parallelism
- Scheduling OpenMP apps with HPC Server

  Using OpenMP Effectively in HPC Applications - Performance considerations
- Optimizations
- Synchronization approaches
- Data reductions
- Scheduling options
- Data coherence and flushing

Day 3

  Using .NET to Develop HPC Applications - Introduction to PFx: Parallel .NET Framework
- Using PFx to develop shared-memory parallel programs
- Cluster-wide, distributed-memory HPC applications
- SOA-based applications and the Windows Communication Foundation
- Using WCF and HPC Server to develop cluster-wide, SOA-based HPC applications
- Developing interactive HPC applications

  Introduction to MPI --- the Message Passing Interface - What is MPI?
- The architecture of MPI programs
- Developing MPI programs in Visual Studio
- Running MPI programs on your local workstation
- Scheduling MPI apps with HPC Server

  MPI Send and Receive - Send and receive: the fundamental operations of MPI
- Message-passing basics
- Semantics of send and receive
- Writing complete MPI programs
- Error handling
- Task parallelism in MPI

Day 4

  Data Parallelism and MPI's Collective Operations - Unsafe MPI programs
- Safe, efficient and readable programs
- MPI's collective operations
- Data parallelism in MPI
- Image processing

  Working with MPI - The practical realities of working with MPI
- Local and remote debugging
- Tracing with ETW
- Profiling
- Performance tuning
- Tools, tools, tools

  Designing MPI Applications - What are your design goals?
- Data parallelism
- Task parallelism
- Functional parallelism
- Pipelining
- Map-reduce
- Hybrid OpenMP + MPI designs
- Other considerations
- Foster's method

  MSMPI, MPI.NET and MPI-2 - Important features for the advanced MPI developer
- Groups
- Topologies
- User-defined datatypes
- MPI I/O
- Dynamic process management
- Remote memory access
- MPI programming in .NET with MPI.NET

Day 5

  The HPC Server API - Interfacing with HPC Server to improve the user's experience
- HPC Server description files
- Console access
- PowerShell access
- Programming against the API
- Developing a client-side front-end to HPC Server
- Automating deployment, execution, and aggregation of results

  Excel and Excel Services with HPC Service - Excel and HPC are natural partners
- Architecting parallel execution of Excel workbooks
- Excel Services and HPC Server
- Excel UDFs and HPC Server

  Porting Applications to HPC Server 2008 - Common porting problems and their solutions
- Moving from 32-bit to 64-bit
- Moving from UNIX-based systems to Windows
- Microsoft SUA --- Sub-system for UNIX Applications
- Tool support

  Setup and Administration of HPC Server 2008 - The scope of HPC Server
- A workable script for setting up an HPC Server cluster
- Ongoing administrative of an HPC Server cluster
- Tools, techniques, and suggestions