kokkos libraries and applications

16
Sandia National Laboratories is a multi-program laboratory managed and operated by Sandia Corporation, a wholly owned subsidiary of Lockheed Martin Corporation, for the U.S. Department of Energy’s National Nuclear Security Administration under contract DE-AC04-94AL85000. Kokkos Libraries and Applications Christian R. Trott, - Center for Computing Research Sandia National Laboratories/NM Unclassified Unlimited Release SAND2019-2045 C D. Sunderland, N. Ellingwood, D. Ibanez, S. Bova, J. Miles, D. Hollman, D. Labreche, V. Dang

Upload: others

Post on 14-Apr-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kokkos Libraries and Applications

Sandia National Laboratories is a multi-program laboratory managed and operated by Sandia Corporation, a wholly owned subsidiary of Lockheed Martin Corporation, for the U.S. Department of Energy’s National Nuclear Security Administration under contract DE-AC04-94AL85000.

Kokkos Libraries and ApplicationsChristian R. Trott, - Center for Computing Research

Sandia National Laboratories/NM

Unclassified Unlimited ReleaseSAND2019-2045 C

D. Sunderland, N. Ellingwood, D. Ibanez, S. Bova, J. Miles, D. Hollman, D. Labreche, V. Dang

Page 2: Kokkos Libraries and Applications

Cost Of Software

§ Optimistic estimate: 10% of an application needs to get rewritten for adoption of Shared Memory Parallel Programming Model

§ Typical Apps: 300k – 600k Lines

§ Uintah: 500k, QMCPack: 400k, LAMMPS: 600k; QuantumEspresso: 400k

§ Typical App Port thus 2-3 Man-Years

§ Sandia maintains a couple dozen of those

§ Large Scientific Libraries

§ E3SM: 1,000k Lines x 10% => 5 Man-Years

§ Trilinos: 4,000k Lines x 10% => 20 Man-Years

10 LOC / hour ~ 20k LOC / year

Page 3: Kokkos Libraries and Applications

ORNL SummitIBM Power9 / NVIDIA Volta

LANL/SNL TrinityIntel Haswell / Intel KNL

ANL Aurora21Intel unannounced Novel Architecture

SNL AstraARM Architecture

SNL NALUWind Turbine CFD

SNL LAMMPSMolecular Dynamics

UT UintahCombustine

ORNL RaptorLarge Eddy Sim

Applications Libraries Frameworks

Page 4: Kokkos Libraries and Applications

Kokkos

ORNL SummitIBM Power9 / NVIDIA Volta LANL/SNL Trinity

Intel Haswell / Intel KNLANL Aurora21Intel unannounced Novel Architecture

SNL AstraARM Architecture

SNL NALUWind Turbine CFD

SNL LAMMPSMolecular Dynamics

UT UintahCombustine

ORNL RaptorLarge Eddy Sim

Applications Libraries Frameworks

Page 5: Kokkos Libraries and Applications

Kokkos EcoSystem

Page 6: Kokkos Libraries and Applications

A Vision of the future

6

PIMDDR

L2*

NVRAM

PIML1

*

Tex

Scr

L1*

Tex

Scr

L1*

Tex

Scr

NICL3

4 Memory Spaces- Bulk non-volatile (Flash?)- Standard DDR (DDR4)- Fast memory (HBM/HMC)- (Segmented) scratch-pad on die

3 Execution Spaces- Throughput cores (GPU)- Latency optimized cores (CPU)- Processing in memory

Special Hardware- Non caching loads- Read only cache- Atomics

3 Programming models??

- GPU: CUDAish- CPU: OpenMP- PIM: ??

Page 7: Kokkos Libraries and Applications

Kokkos AbstractionsKokkos

Execution Spaces (“Where”)

Execution Patterns

Execution Policies (“How”)

Memory Spaces (“Where”)

Memory Layouts

Memory Traits (“How”)

Parallel ExecutionData Structures

- CPU, GPU, Executor Mechanism

- parallel_for/reduce/scan, task-spawn

- Range, Team, Task-Graph

- HBM, DDR, Non-Volatile, Scratch

- Row/Column-Major, Tiled, Strided

- Streaming, Atomic, Restrict

Page 8: Kokkos Libraries and Applications

Kokkos Core CapabilitiesConcept Example

Parallel Loops parallel_for( N, KOKKOS_LAMBDA (int i) { ...BODY… });

Parallel Reduction

parallel_reduce( RangePolicy<ExecSpace>(0,N), KOKKOS_LAMBDA (int i, double& upd) {…BODY...upd += ...

}, result);

Tightly Nested Loops

parallel_for(MDRangePolicy<Rank<3> > ({0,0,0},{N1,N2,N3},{T1,T2,T3}, KOKKOS_LAMBDA (int i, int j, int k) {…BODY...});

Non-Tightly Nested Loops

parallel_for( TeamPolicy<Schedule<Dynamic>>( N, TS ), KOKKOS_LAMBDA (Team team) {… COMMON CODE 1 ...parallel_for(TeamThreadRange( team, M(N)), [&] (int j) { ... INNER BODY... });… COMMON CODE 2 ...

});

Task Dag task_spawn( TaskTeam( scheduler , priority), KOKKOS_LAMBDA (Team team) { … BODY });

Data Allocation View<double**, Layout, MemSpace> a(“A”,N,M);

Data Transfer deep_copy(a,b);

Exec Spaces Serial, Threads, OpenMP, Cuda, ROCm (experimental)

Page 9: Kokkos Libraries and Applications

Kokkos Projects§ Production Code Running Real Analysis Today

§ We got about 12 or so.§ Production Code or Library committed to using Kokkos and actively porting

§ Somewhere around 25§ Packages In Large Collections (e.g. Tpetra, MueLu in Trilinos) committed to

using Kokkos and actively porting§ Somewhere around 50

§ Counting also proxyapps and projects which are evaluating Kokkos (e.g. projects who attended boot camps and trainings).§ Estimate 80-120 packages.

Page 10: Kokkos Libraries and Applications

Some Application Examples

02468

10121416

CPU GPU KNL

Tim

e pe

r Tim

este

p[s

]

Reverse Monte Carlo Ray Tracing 64^3 cells

Original Kokkos

0

5

10

15

20

IntelKNL

IBMPower8

NVIDIAK80

NVIDIAP100

Tim

e [s

]

Architecture Comparison in.reaxc.tatb / 24k atoms / 100

steps

Vanilla Kokkos

0

20

40

60

80

100

120

140

Intel K

NL

NVIDIA

K40

NVIDIA

K80

NVIDIA

P10

0

Intel X

eon E

7-487

0

Intel K

NC

Tim

e in

s

Metal foil expansion Single-Rank test

Uintah- System wide many task framework- Combustion Codes- Did Gordon Bell Submissions - University of Utah

LAMMPS- Molecular Dynamics Code- One of most widely used codes- Often part of procurement benchmarks- Sandia National Laboratories

Alexa- Portably performant shock hydrodynamics application- Solving multi-material problems Molecular Dynamics Code- Sandia National Laboratories

Page 11: Kokkos Libraries and Applications

Aligning Kokkos with the C++ Standard§ Long term goal: move capabilities from Kokkos into the ISO standard

§ Concentrate on facilities we really need to optimize with compiler

Kokkos Core

Kokkos Legacy

C++ Backport

C++ Standard

Page 12: Kokkos Libraries and Applications

C++ Features in the Works§ First success: atomic_ref<T> in C++20

§ Provides atomics with all capabilities of atomics in Kokkos

§ atomic_ref(a[i])+=5.0; instead of atomic_add(&a[i],5.0);

§ Next thing: Kokkos::View => std::mdspan

§ Provides customization points which allow all things we can do with Kokkos::View

§ Better design of internals though! => Easier to write custom layouts.

§ Also: arbitrary rank (until compiler crashes) and mixed compile/runtime ranks

§ We hope will land early in the cycle for C++23 (i.e. early in 2020)

§ Also C++23: Executors and Basic Linear Algebra (just began design work)

§ David will talk about most mdspan, atomic_ref and Executors

Page 13: Kokkos Libraries and Applications

Towards C++23 Executors§ C++ standard is moving towards more asynchronicity with Executors

§ Dispatch of parallel work consumes and returns new kind of future§ Aligning Kokkos with this development means:

§ Introduction of Execution space instances

§ Patterns return futures and Execution Policies consume them

DefaultExecutionSpace spaces[2];partition( DefaultExecutionSpace(), 2, spaces);// f1 and f2 are executed simultaneouslyparallel_for( RangePolicy<>(spaces[0], 0, N), f1); parallel_for( RangePolicy<>(spaces[1], 0, N), f2);// wait for all work to finishfence();

auto fut_1 = parallel_for( RangePolicy<>(“Funct1”, 0, N), f1 );auto fut_2a = parallel_for( RangePolicy<>(“Funct2a”, fut_1,0, N), f2a);auto fut_2b = parallel_for( RangePolicy<>(“Funct2b”, fut_1,0, N), f2b);auto fut_3 = parallel_for( RangePolicy<>(“Funct3”, all(fut_2a,fut2_b),0, N), f3);fence(fut_3);

f1

f2a f2b

f3

Page 14: Kokkos Libraries and Applications

Events For Learning More§ BootCamp in Oakland 26th – 29th of March

§ https://www.exascaleproject.org/event/ppkb2019/§ Priority for ECP projects, but likely spots available for other teams§ 2 days of generic Kokkos tutorials including profiling/degugging§ 2 days of work on bring-your-own app

§ 1st Kokkos Usergroup Meeting in Albuquerque 23rd to 25th of April§ https://github.com/kokkos/kokkos/issues/1962§ Updates on what is new in Kokkos § User talks (applications and libraries) on how Kokkos is getting used§ Kokkos Roadmap Updates and Discussion§ Feedback sessions

Page 15: Kokkos Libraries and Applications

Links§ https://github.com/kokkos Kokkos Github Organization

§ Kokkos: Core library, Containers, Algorithms§ Kokkos-Kernels: Sparse and Dense BLAS, Graph, Tensor (under development)§ Kokkos-Tools: Profiling and Debugging § Kokkos-MiniApps: MiniApp repository and links§ Kokkos-Tutorials: Extensive Tutorials with Hands-On Exercises

§ https://cs.sandia.gov Publications (search for ’Kokkos’)§ Many Presentations on Kokkos and its use in libraries and apps

§ http://on-demand-gtc.gputechconf.com Recorded Talks§ Presentations with Audio and some with Video

C.R. Trott, D. Sunderland, N. Ellingwood, D. Ibanez, S. Bova, J. Miles, D. Hollman, D. Lanbreche, V. Dang

Page 16: Kokkos Libraries and Applications