Introduction to High-Performance Computing and HPC Server 2008
-
Motivation for HPC
-
Brief product history of CCS and HPCS
-
Brief overview of HPC Server 2008 — components, job submission, scheduler
-
Product differentiators
-
Software development technologies: parametric sweep, threads, OpenMP, MPI, SOA, etc.
-
Measuring performance — linear speedup
-
Predicting performance — Amdahl’s law
Multi-threading for Performance
-
Multi-threading for responsiveness and performance
-
The costs of multi-threading
-
Structured, fork-join parallelism
-
Multi-threading in C# using the .NET Thread class
-
Multi-threading in VC++ using the Windows API
-
Load balancing
-
Scheduling multi-threaded apps on Windows HPC Server
The Dangers of Multithreading
-
Race conditions
-
Critical sections
-
Starvation
-
Livelock
-
Deadlock
-
Compiler and language implications
-
Memory models
-
Locks
-
Interlocking
-
Lock-free designs
The HPCS Job Scheduler
-
Throughput vs. performance
-
Nodes vs. sockets vs. cores
-
Jobs vs. Tasks
-
Job and task states
-
Default scheduling policies
-
The impact of job priorities and job preemption
-
Job resources and dynamic growing / shrinking
-
Submission and activation filters
Parallel Application Design
-
Two sample design problems…
-
Foster’s method
-
Common problem decompositions
-
Common communication patterns
-
Computation vs. communication
-
Design patterns: master-worker, pipeline, map-reduce, SOA, parametric sweep, and more
Introduction to OpenMP
-
What is OpenMP?
-
Shared-memory programming
-
Using OpenMP in Visual Studio with VC++
-
Parallel regions
-
Execution model
-
Data parallelism
-
Load balancing, static vs. dynamic scheduling
-
Scheduling OpenMP apps on Windows HPC Server
Running and measuring performance on the cluster
-
Barriers
-
Critical sections
-
Synchronization approaches
-
Implementing common design patterns — conditional, task, master-worker, nested
-
Data coherence and flushing
-
Environment variables
-
Common pitfalls
Introduction to the .NET Task Parallel Library
-
What is the TPL?
-
Moving from threads to tasks
-
Using the TPL in Visual Studio with C#
-
Execution model
-
Parallel.For
-
Data and task parallelism
-
Synchronization approaches
-
Concurrent data structures
-
Scheduling TPL-based apps on Windows HPC Server
Interfacing with HPCS-based Clusters
-
Cluster Manager
-
Job Manager
-
Job Description Files
-
clusrun
-
Console window
-
PowerShell
-
Scripts
-
Programmatic access via HPCS API v2.0
Intro to SOA with HPC Server 2008
-
Service-oriented architectures
-
SOA and WCF
-
Mapping SOA onto Jobs and the Job Scheduler
-
Private vs. shared sessions
-
Secure vs. insecure sessions
Create SOA-based Apps with HPC Server 2008
-
Service-side programming
-
Service configuration
-
Client-side programming
-
WCF configuration and tracing
General Performance Tuning of Parallel Applications
-
Performance counters
-
Heat map in Windows HPC Server 2008
-
Customizing the heat map
-
perfmon
-
xperf (aka the Windows Performance Toolkit)
-
SOA tuning
-
What to look for…
-
Other tools
Introduction to MPI
-
Shared-memory vs. distributed-memory
-
The essence of MPI programming — message-passing SPMD
-
Microsoft MPI
-
Using MSMPI in Visual Studio with VC++
-
Execution model
-
MPI Send and Receive
-
mpiexec
-
Scheduling MPI apps on Windows HPC Server
Data Parallelism and MPI’s Collective Operations
-
Data parallelism in MPI
-
A real world example
-
Broadcast
-
Scatter
-
Gather
-
Barriers
-
Reductions
-
Defining your own reduction operator
-
Common pitfalls
MPI.NET
-
Why MPI.NET?
-
Using MPI.NET in Visual Studio with C#
-
Type-safe Send and Receive
-
Collective operations in MPI.NET
-
Execution model
-
Scheduling MPI.NET apps on Windows HPC Server
Using MPI — Debugging, Tracing, and Other Tools
-
Local debugging with Visual Studio
-
Remote debugging with Visual Studio
-
General MPI tracing
-
Tracing with ETW (Event Tracing for Windows)
-
Trace visualization
-
Other tools for MPI developers
Designing MPI Applications
-
Hiding latency by overlapping computation and communication
-
Avoiding deadlock
-
Hybrid designs involving both MPI and OpenMP
-
Buffering
-
Error handling
-
I/O and large datasets
MPI-2
-
Groups
-
Communicators
-
Topologies
-
Non-scalar data: packing/unpacking, non-contiguous arrays, and user-defined datatypes
-
MPI I/O
-
Remote memory access
-
[ Dynamic process creation is not supported in MSMPI ]
Excel-based HPC Apps
-
Excel as a computation engine
-
Performing Excel computations on Windows HPC Server 2008
-
Using Excel Services
-
Using Excel UDFs
-
Future versions of Excel and HPC Server
Porting UNIX apps to Windows HPC Server 2008
-
The most common porting issues
-
32-bit to 64-bit
-
UNIX calls
-
Manual porting of UNIX code
-
Cygwin
-
MinGW
-
Microsoft SUA — Subsystem for UNIX-based Applications
Open Grid Forum HPC Basic Profile
-
What is the OGF HPC Basic Profile?
-
Platform-neutral job submission
-
JSDL — Job Submission Description Language
-
Enabling in Windows HPC Server 2008
Setup and Administration of Windows HPC Server 2008
-
Hardware requirements
-
Software requirements
-
Initial decisions
-
Headnode setup
-
Compute node setup
-
Broker node setup
-
Developer machine setup
-
Diagnostics
-
Maintenance — including performance
-
Troubleshooting