High-Performance Computing Fundamentals with HPC Server


Course description:

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.



Technologies covered: Windows HPC Server 2008, OpenMP, PFx, MPI, MPI.NET, WCF, SUA, Excel Services
Programming language(s): Visual C++, C#
Length and schedule: Five days, 9am-5pm


Who Should Attend

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



  

upcoming public offerings


8/11/2008  Irvine, CA


course instructors


Dr. Joe Hummel

Course outline:

  Module Topics Covered  
    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
 
    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
 
    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
 
    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
 
    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