kokkos / programmingguide Goto Github PK
View Code? Open in Web Editor NEWPrograming guide
License: Other
Programing guide
License: Other
# This repository is archived. It contains the a latex version of the original Kokkos Programming Guide.
Kokkos::parallel_scan
example is wrong because it aliases input and output arrays. Final result will (incorrectly) be zero. For example, think of what happens on zeroth iteration (i=0
).
The Programming Guide and API Reference need to be completed.
As of today, the public (wiki) version and private version (this site) are consistent as I made "editorial" changes only to clean up both sites, including corrects in the Home index.
Please use this "issue" to identify contributions made (dates) so that R&A can be performed more easily. Maybe this will facilitate our updating of the public wiki (which was identified at ORNL18 as being very helpful).
The ProgrammingGuide has several footnotes in the .tex version. Develop a method to represent footnotes in the wiki.
Need to separate out what is associated with memory and what is really execution. Imagine a new developer saying.. "I have an issue with my data structure, which section should I read?"
Go to https://github.com/kokkos/ProgrammingGuide/wiki/API-Alphabetical to find the links!
Example for a class description: https://github.com/kokkos/ProgrammingGuide/wiki/Kokkos%3A%3AView
Example for a function description:
https://github.com/kokkos/ProgrammingGuide/wiki/Kokkos%3A%3Aparallel_for
You need to potentially create the pages, and also get them integrated in the hierarchy of content listing.
Assignee | Class/Function |
---|---|
@crtrott | |
@crtrott | |
@crtrott | |
@crtrott | |
@crtrott | |
@crtrott | |
@crtrott | |
@crtrott | |
@jeffmiles63 | |
@jeffmiles63 | |
@crtrott | |
@ibaned | |
@ibaned | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@jeffmiles63 | |
@dhollman | |
@dhollman | |
@jeffmiles63 | |
@dhollman | |
@crtrott | |
@jeffmiles63 | |
@ndellingwood | |
@dhollman | |
@ndellingwood | (X)subview |
@jeffmiles63 | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@dhollman | |
@crtrott |
Two non-editorial changes were made; verify that these changes are acceptable and correct.
Document Section 2.1.1: There is a reference in this section (3rd sentence) to abstract machine models for Exascale computing; what is this document?
Goal: re-implement the inner product exercise using
1. KokkosKernels BLAS functions
2. KokkosKernels team-based BLAS function
Details: <y,A*x>
- y is N x1, A is N x M , x is M x1
- Look for comments labeled with “EXERCISE”
- Compile and run on OpenMP, CUDA backends
- Compare performance of these two implementations
- Try LayoutLeft and LayoutRight
result = KokkosBlas::dot(x,y)
performs result = SUM_i(y[i]*x[i])
KokkosBlas::gemv(“N”,alpha,A,x,beta,y)
performs matrix-vector multiplication y[i] = beta*y[i] + alpha*SUM_j(A[i,j]*x[j])
<A[teamId,:],x>
KokkosBlas::Experimental::dot(teamId,x,y)
performs result = SUM_i(y[i]*x[i])
within each thread teamGoal: implement conjugate gradient solver for square, symmetric, positive-definite sparse matrix
Details: A*x=b
- b is N x1, A is N x N symmetric, positive-definite sparse matrix, x is N x1
- Look for comments labeled with “EXERCISE”
- Use KokkosKernels BLAS and KokkosKernels Sparse BLAS
- Sparse matrix generation is provided
- Compile and run on OpenMP, CUDA backends
- Vary problem size: -N #
- Compare performance of CPU vs GPU
- Hint:
result = KokkosBlas::dot(x,y)
performs result = SUM_i(y[i]*x[i])
KokkosBlas::axpy(alpha,x,y)
performs y[i] = y[i] + alpha*x[i]
KokkosBlas::axpby(alpha,x,beta,y)
performs y[i] = beta*y[i] + alpha*x[i]
KokkosSparse::spmv(“N”,alpha,A,x,beta,y)
performs sparse matrix-vector multiplication y[i] = beta*y[i] + alpha*SUM_j(A[i,j]*x[j])
Tables 4.1 and 4.2 need to be completed. Their structure can be improved to make them more readable.
Editors (or Translators) have been suggested for getting the Programming Guide established as a wiki page - Markdown (Dan) and Pandoc (Fernanda) (https://pandoc.org). Do Markdown and Pandoc work on the .tex files? Or does a PDF need to be created?
The Github Wiki itself presents various editors ( Edit mode ) as options for direct creation. My plan is to simply edit in the text (cut and paste from Kokkos_PG_*.tex files) and then mark the insertions appropriately for formatting. This i will begin today unless I hear otherwise.
The figures in ProgrammingGuide/figures must be converted to jpeg, png or ?? in order to be displayed in the wiki. Using Linux tool 'convert', generate a .png file from each .pdf file and commit it to directory figures.
This is what Christian meant by the section titled "Managing Data Placement" in the chapter on View.
Also, please emphasize memory space over execution space, and talk about the UVM and pinned variants of CudaSpace.
If we put parallel dispatch before View, we can show examples of initializing Views using parallel_for (for example). On the other hand, if we put View before parallel dispatch, examples of the latter can use Views.
In Progress:
Ch 7
To Do:
Ch 8 (HeirPara)
Ch 9 (CustomReduct - fill in?)
Ch 10 (Atomics - no chapter in 2015 PG document)
Ch 12 (Interoperability)
This figure is used in tex file Kokkos_PG_ProgrammingModel.tex at line 10, which would correspond to Ch 3 page 15, figure 3.1 of the compiled programming guide.
The following items are currently needed to complete the wiki page:
This is Duane's status on the Wiki version of the Programming Guide
I cloned the Programming Guide and made some editorial changes (less than two dozen editorial-type corrections) to the .tex files. Whether I use the build instructions in this repo ( README file : pdflatex Kokkos_PG ) or the target in the repo Makefile ( make Kokkos_PG ), the result is the same. ( Note, the goal of these builds is to create a PDF of the Programming Guide. )
The problems are 1) chapter headings which overlay the apparently correctly built document a quarter of the way down the first page of the chapter and 2) in-document references that point to other locations in the document which fail to be evaluated and inserted ( left as ? marks ).
Status:
AppName | Area | Institution | Website | Status | Uses KokkosKernels | Contact Name | Contact Email | Can we mention APP | Can we refer other people |
---|---|---|---|---|---|---|---|---|---|
Albany | Climate | Sandia | https://github.com/gahansen/Albany | Porting | Y | Andy Salinger | - | Y | Y |
Alexa | Shock Hydrodynamics | Sandia | - | Production | Y | Dan Ibanez | - | Y | Y |
Aria | Thermal Fluid Multi Physics | Sandia | Porting | Y | Jonathan Clausen | [email protected] | Y | Y | |
LAMMPS | Molecular Dynamics | Sandia | https://github.com/lammps/lammps | Production | N | Stan Moore | - | Y | Y |
Trilinos-Tpetra | Distributed Sparse Linear Algebra Package | Sandia | https://github.com/trilinos/trilinos | Production | Y | Karen Devine | - | Y | Y |
Parallel Research Kernels | Programming Models Research | Intel Corporation | https://github.com/ParRes/Kernels | Evaluation | N | Jeff Hammond | [email protected] | Y | Y |
Compadre Toolkit | Compatible remap and PDE solution on particles using Generalized Moving Least Squares | Sandia | - | Production | N | Paul Kuberry | [email protected] | Y | Y |
HOMMEXX | Atmospheric Dynamics for Climate Simulations | Sandia | Production | Y | Andy Salinger | [email protected] | Y | ? | |
MiniMD | Molecular Dynamics Proxy App | Sandia | https://github.com/mantevo/minimd | Production | N | Christian Trott | [email protected] | Y | Y |
ExaMiniMD | Molecular Dynamics Proxy App | Sandia | https://github.com/ecp-copa/examinimd | Production | N | Christian Trott | [email protected] | Y | Y |
MiniFE | Finite Element Proxy App | Sandia | https://github.com/mantevo/minife | Production | N | Christian Trott | [email protected] | Y | Y |
GEMPIC | PIC Plasma Physics | Max Planck Institut Munich | - | ? | N | Victor Artigues | [email protected] | ? | ? |
AllRegime | CFD, All Mach number Hydrodynamics on regular grids | CEA | - | Porting | N | Thomas Padioleau | [email protected] | yes | yes |
ppkMHD | CFD, High order schemes for high Mach number MHD applications in astrophysics | CEA | - | Porting | N | Pierre Kestener | [email protected] | yes | yes |
LBM_saclay | Lattice Boltzmann methods for multiphase flow | CEA | - | Evaluation | N | Alain Cartalade / Pierre Kestener | [email protected]; [email protected] | yes | yes |
KARFS | Direct numerical simulations of reacting flows with detailed chemistry using many-core/GPU acceleration | KAUST | Production? | ? | ? | ? | ? | ? | |
NekMesh | high-order mesh generator | Imperial College London / University of Exeter | ? | Production? | ? | Jan Eichstaedt | [email protected] | ? | ? |
Faster | SeismicStuff | CSCS | - | Production | Y | - | - | ? | ? |
@crtrott Do details like company info need to be updated and a new copy of the pdf added to Kokkos for the 3.0 copyright? Or does that info remain unchanged since the ProgrammingGuide was written as a SAND report?
Update compiler list in Section 4.1 ( see kokkos/README file )
Review the Wiki Document
Section 4.4 (Compiling for CUDA section) makes statements about a couple of compiler version numbers;
these should be checked and statements made to be accurate.
this is an issue body
They currently overlap quite a bit.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.