Design for Heterogeneity
Overview
Teaching: 0 min
Exercises: 0 minQuestions
How should one design software for heterogeneous platforms
Objectives
To understand how research software design needs to adapt for heterogeneous platforms
Mechanisms Needed by the Code
Underlying Ideas: Unification of Computational Expressions
Make the same code work on different devices
- Same algorithm different data layouts or operation sequence:
- A way to let compiler know that ”this” expression can be specialized in many ways
- Definition of specializations
- Often done with template meta-programming
- More challenging if algorithms need to be fundamentally different
- Support for alternatives
Underlying Ideas: Moving Work and Data to the Target
Parallelization Models
- Hierarchy in domain decomposition
- Distributed memory model at node level – still very prevalent\, likely to remain so for a while
- Also done with PGAS models – shared with locality being important
Assigning work within the node
“Parallel For” or directives with unified memory
Directives or specific programming model for explicit data movement
More complex data orchestration system for asynchronous computation
Task based work distribution
Underlying Ideas: Mapping Work to Targets
This is how many abstraction layers work
-
Infer the structure of the code
-
Infer the map between algorithms and devices
-
Infer the data movements
-
Map computations to devices
These are specified either through constructs or pragmas
It can also be the end user who figures out the mapping
In either case performance depends upon how well the mapping is done
Features and Abstractions to be Added to Earlier Example
Mechanisms Needed by the Code : Example Flash-X
Construction of Application with Components and Tools
Key Points
More separation of concerns and abstractions are needed