Compare commits
No commits in common. "f88d4681f2d127a96fb0ab5daf9d8930d7c08935" and "877feadb7b5a6dc6473db4b6318c5fdd58ec7bba" have entirely different histories.
f88d4681f2
...
877feadb7b
@ -23,15 +23,6 @@
|
||||
|
||||
\setbeamertemplate{footline}{
|
||||
\vspace{0.6cm}
|
||||
\hbox{%
|
||||
\begin{beamercolorbox}[wd=.9\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
|
||||
\usebeamercolor[fg]{block title}%
|
||||
\ifnum\thepage>1
|
||||
\thepage / \inserttotalframenumber\hspace*{2ex} % old version
|
||||
\fi
|
||||
%\insertframenumber{} \hspace*{2ex} % new version without total frames
|
||||
\end{beamercolorbox}}%
|
||||
\vskip0pt%
|
||||
}
|
||||
|
||||
|
||||
|
384
scemama.org
384
scemama.org
@ -35,8 +35,8 @@
|
||||
#+startup: beamer
|
||||
#+options: H:2 toc:nil
|
||||
|
||||
* QMC in TREX
|
||||
** QMC in TREX
|
||||
* TREX: Targeting REal chemical accuracy at the EXascale
|
||||
** TREX: Targeting REal chemical accuracy at the EXascale
|
||||
|
||||
#+LATEX: \begin{exampleblock}{QMC: Quantum Monte Carlo methods}
|
||||
- Highly accurate methods
|
||||
@ -88,8 +88,7 @@ E &= &\frac{\int \dcoord \Phi(\coord) {\cal H} \Phi(\coord)}
|
||||
- Very low memory requirements (no integrals)
|
||||
- Distribute walkers on different cores or compute nodes
|
||||
- No blocking communication: near-ideal scaling
|
||||
- Difficulty to parallelize within a QMC trajectory: depends on the
|
||||
number of electrons
|
||||
- Difficulty: parallelize within a QMC trajectory
|
||||
#+LATEX: \end{column}
|
||||
#+LATEX: \begin{column}{0.6\textwidth}
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
@ -100,12 +99,11 @@ E &= &\frac{\int \dcoord \Phi(\coord) {\cal H} \Phi(\coord)}
|
||||
** Both libraries
|
||||
*** Three objectives
|
||||
1. *Productivity* \\
|
||||
Usable and useful by scientists in different programming languages
|
||||
Used and developed by scientists in different languages
|
||||
2. *Portability* \\
|
||||
Target: all HPC systems (CPU, GPU, ARM, x86, etc.)
|
||||
3. *Performance* \\
|
||||
Must be efficient on all architectures: possible tradeoffs
|
||||
between portability and performance
|
||||
Must be efficient on all architectures
|
||||
|
||||
*** Free (libre) software
|
||||
- Requirement for open science
|
||||
@ -174,7 +172,7 @@ digraph G {
|
||||
#+LATEX: \end{columns}
|
||||
|
||||
(BSD license) \\
|
||||
[[https://github.com/trex-coe/trexio]]
|
||||
https://github.com/trex-coe/trexio
|
||||
|
||||
** TREXIO: I/O library
|
||||
|
||||
@ -210,10 +208,9 @@ digraph G {
|
||||
| Nucleus | Basis | CI coefficients |
|
||||
| AO | MO | Two-electron integrals |
|
||||
| One-electron integrals | Density matrices | ECP |
|
||||
- Each group contains multiple *attributes*: information related to the
|
||||
group
|
||||
- Each group contains multiple *attributes*
|
||||
|
||||
** Source code :noexport:
|
||||
** Source code
|
||||
|
||||
- For each attribute :
|
||||
#+begin_src c
|
||||
@ -229,14 +226,14 @@ trexio_exit_code trexio_[has/read/write]_<group>_<attribute>
|
||||
- Performance : HDF5 back end
|
||||
- Portability : Only optional dependency is HDF5
|
||||
|
||||
** Source code :noexport:
|
||||
** Source code
|
||||
|
||||
Productivity:
|
||||
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[./trexio-doc1.png]]
|
||||
|
||||
** Documentation :noexport:
|
||||
** Documentation
|
||||
|
||||
#+ATTR_LATEX: :height \textheight
|
||||
[[./trexio-doc2.png]]
|
||||
@ -246,19 +243,19 @@ trexio_exit_code trexio_[has/read/write]_<group>_<attribute>
|
||||
** QMC kernel library
|
||||
|
||||
*** Computational kernels
|
||||
- QMCkl will contain the main kernels of QMC methods: Domain
|
||||
specific library, end-user driven
|
||||
- QMCkl will contain the main kernels of QMC methods (Domain
|
||||
specific library, end-user driven)
|
||||
- Written together by QMC experts and HPC experts
|
||||
- Multiple high performance implementations of the kernels, tuned
|
||||
for different
|
||||
- architectures: portability is critical for users
|
||||
- problem sizes: from small to large systems
|
||||
- requested accuracy: reduced precision
|
||||
- architectures (portability is critical for users)
|
||||
- problem sizes (from small to large systems)
|
||||
- requested accuracy (reduced precision)
|
||||
|
||||
** Objectives
|
||||
|
||||
- The code must stay easy to understand by the physicists/chemists.
|
||||
Performance-related aspects should be delegated to the library
|
||||
Performance-related aspects are delegated to the library
|
||||
- Scientists should be able to use their preferred language
|
||||
- Scientists should not lose control of their codes
|
||||
- Codes should not die when the architecture changes
|
||||
@ -277,9 +274,7 @@ trexio_exit_code trexio_[has/read/write]_<group>_<attribute>
|
||||
2. *High performance libraries* \\
|
||||
Efficient on a given architecture, but not necessarily
|
||||
readable by physicists/chemists. \\
|
||||
Performance within 10% to maximize portability and simplicity.
|
||||
3. *Ultra-High performance libraries* \\
|
||||
Generated with auto-tuning tools for well identified datasets.
|
||||
Performance within 10\% to maximize portability and simplicity.
|
||||
|
||||
- Both /Documentation/ and /High performance/ have the same API
|
||||
(similar to BLAS on netlib /vs/ MKL).
|
||||
@ -288,22 +283,10 @@ trexio_exit_code trexio_[has/read/write]_<group>_<attribute>
|
||||
implemented in the HPC versions when the API is stabilized.
|
||||
|
||||
- Performance: enable a data-driven task-based parallelism
|
||||
|
||||
** Documentation library :noexport:
|
||||
Literate programming with Org-mode:
|
||||
- Comments are more important than code
|
||||
- Can add graphics, \LaTeX formulas, tables, etc
|
||||
- Documentation always synchronized with the code
|
||||
- Some routines can be generated by embedded scripts
|
||||
- Kernels are implemented in Fortran for readability
|
||||
- The API is C-compatible: QMCkl appears like a C library
|
||||
$\Longrightarrow$ can be used in all other languages
|
||||
- Example: Prototyping in Julia
|
||||
|
||||
** Library design
|
||||
|
||||
- Creation of a /Context/ that keeps a consistent state of the
|
||||
library (pointers to computed data, configuration parameters, etc.)
|
||||
- Creation of a /Context/ that keeps a consistent state of the library
|
||||
- Memory allocation is abstract:
|
||||
#+begin_src c
|
||||
void* qmckl_malloc(qmckl_context context, const qmckl_memory_info_struct info);
|
||||
@ -313,9 +296,58 @@ void* qmckl_malloc(qmckl_context context, const qmckl_memory_info_struct info);
|
||||
context untouched (no allocation, no modification in-place)
|
||||
- High-level functions: let the library call multiple kernels in an
|
||||
optimal way, possibly updating the context
|
||||
- Use of IRP programming paradigm\footnote{http://arxiv.org/abs/0909.5012} to keep track of dependencies
|
||||
between kernels: re-compute only what is necessary and store
|
||||
computed data in the context
|
||||
- Use of IRP programming paradigm to keep track of dependencies
|
||||
between kernels: re-compute only what is necessary
|
||||
|
||||
** Use case: low-level
|
||||
|
||||
#+begin_src c
|
||||
#include <qmckl.h>
|
||||
|
||||
// ...
|
||||
qmckl_exit_code rc;
|
||||
int64_t m, n, LDA, LDB, LDC;
|
||||
// ...
|
||||
double A[LDA*3];
|
||||
double B[LDB*3];
|
||||
double C[LDC*n];
|
||||
// ...
|
||||
|
||||
context = qmckl_context_create();
|
||||
|
||||
// Compute inter-particle distances between xyz coordinates in A[m][3] and B[3][n]
|
||||
// and store the result in C[m][n]
|
||||
rc = qmckl_distance(context, 'N', 'T', m, n, A, LDA, B, LDB, C, LDC);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
// ...
|
||||
#+end_src
|
||||
|
||||
** Use case: high-level
|
||||
|
||||
#+begin_src c
|
||||
#include <qmckl.h>
|
||||
// ...
|
||||
qmckl_exit_code rc;
|
||||
double e_loc;
|
||||
qmckl_context context;
|
||||
|
||||
context = qmckl_context_create();
|
||||
|
||||
// Store WF parameters in the context
|
||||
rc = qmckl_read_trexio(context, trexio_filename);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
// Set the electron coordinates in the context
|
||||
rc = qmckl_set_electron_coord (context, 'N', elec_coord);
|
||||
assert(rc == QMCKL_SUCCESS);
|
||||
|
||||
// Return the local energy at the current electron positions
|
||||
rc = qmckl_get_local_energy(context, &e_loc);
|
||||
// ...
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: /home/scemama/MEGA/TEX/Presentations/2021/Intel/scemama.pdf
|
||||
|
||||
** Dependencies between kernels
|
||||
|
||||
@ -368,56 +400,7 @@ digraph G {
|
||||
#+LATEX: \end{column}
|
||||
#+LATEX: \end{columns}
|
||||
|
||||
** Use case: low-level
|
||||
|
||||
#+begin_src c
|
||||
#include <qmckl.h>
|
||||
|
||||
// ...
|
||||
qmckl_exit_code rc;
|
||||
int64_t m, n, LDA, LDB, LDC;
|
||||
// ...
|
||||
double A[LDA*3];
|
||||
double B[LDB*3];
|
||||
double C[LDC*n];
|
||||
// ...
|
||||
|
||||
context = qmckl_context_create();
|
||||
|
||||
// Compute inter-particle distances between xyz coordinates in A[m][3] and B[3][n]
|
||||
// and store the result in C[m][n]
|
||||
rc = qmckl_distance(context, 'N', 'T', m, n, A, LDA, B, LDB, C, LDC);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
// ...
|
||||
#+end_src
|
||||
|
||||
** Use case: high-level
|
||||
|
||||
#+begin_src c
|
||||
#include <qmckl.h>
|
||||
// ...
|
||||
qmckl_exit_code rc;
|
||||
double e_loc;
|
||||
qmckl_context context;
|
||||
|
||||
context = qmckl_context_create();
|
||||
|
||||
// Store WF parameters in the context
|
||||
rc = qmckl_read_trexio(context, trexio_filename);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
// Set the electron coordinates in the context
|
||||
rc = qmckl_set_electron_coord (context, 'N', elec_coord);
|
||||
assert(rc == QMCKL_SUCCESS);
|
||||
|
||||
// Return the local energy at the current electron positions
|
||||
rc = qmckl_get_local_energy(context, &e_loc);
|
||||
// ...
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: /home/scemama/MEGA/TEX/Presentations/2021/Intel/scemama.pdf
|
||||
|
||||
|
||||
** Development strategy
|
||||
|
||||
1. Kernel extraction: QMC specialists agree on the
|
||||
@ -425,11 +408,82 @@ rc = qmckl_get_local_energy(context, &e_loc);
|
||||
2. A mini-application is written to find the optimal data layout
|
||||
with HPC experts from real-size examples
|
||||
3. The kernel is written in the documentation library
|
||||
4. The documentation library is linked in a QMC code to check
|
||||
correctness and numerical accuracy
|
||||
4. The documentation library is linked in a QMC code to check correctness
|
||||
5. HPC experts provide an HPC version of the kernel
|
||||
6. The HPC library is linked in the QMC codes of the CoE
|
||||
|
||||
** Documentation library
|
||||
Literate programming with Org-mode:
|
||||
- Comments are more important than code
|
||||
- Can add graphics, \LaTeX formulas, tables, etc
|
||||
- Documentation always synchronized with the code
|
||||
- Some routines can be generated by embedded scripts
|
||||
- Kernels are implemented in Fortran for readability
|
||||
- The API is C-compatible: QMCkl appears like a C library
|
||||
$\Longrightarrow$ can be used in all other languages
|
||||
- Example: Prototyping in Julia
|
||||
|
||||
** High-Performance strategies
|
||||
|
||||
*** Linear algebra hot spots
|
||||
|
||||
| GEMM | Rank-1 update | Matrix Inversion |
|
||||
| GEMV | Diagonal of GEMM | Shermann-Morrison-Woodburry |
|
||||
|
||||
*** Matrices are relatively small ($\le 1000\times 1000$)
|
||||
|
||||
- Matrices are stored in tiled format $\Longrightarrow$ task-based
|
||||
linear algebra interleaved computation of multiple kernels
|
||||
- Increase parallelism by aggregating multiple independent walkers
|
||||
in matrices
|
||||
- Needs fast linear algebra kernels for small matrices
|
||||
|
||||
** High-Performance strategies
|
||||
|
||||
*** Tuning
|
||||
- Optimization is guided by analysis with *MAQAO*\footnote{https://maqao.org}.
|
||||
- Specialized versions of critical hot-spots
|
||||
- MIPP for portable intrinsics / specialized code generation
|
||||
- Monitoring of the use of the library to choose most efficient versions
|
||||
- Optimizations guided by monitoring numerical accuracy (*Verificarlo*\footnote{https://github.com/verificarlo/verificarlo})
|
||||
|
||||
** Example: Specialized DGEMM kernel I
|
||||
|
||||
*** Simple algorithm :B_block:BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_env: block
|
||||
:BEAMER_col: 0.45
|
||||
:END:
|
||||
- Simple micro kernel (*GotoDGEMM*\footnote{doi:10.1145/1356052.1356053})
|
||||
- Code generation
|
||||
- *Tiling* scheme\footnote{doi:10.1109/ICPP.2015.29}
|
||||
|
||||
*** Tiling scheme :B_block:BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.45
|
||||
:BEAMER_env: block
|
||||
:END:
|
||||
#+ATTR_LATEX: :width 5cm :height 5cm :keepaspectratio :right
|
||||
[[./tiling_icpp2015.pdf]]
|
||||
|
||||
** Example: Specialized DGEMM kernel II
|
||||
|
||||
*** Benchmarks
|
||||
|
||||
- Comparison of MKL vs Specialied DGEMM
|
||||
|
||||
#+ATTR_LATEX: :width 10cm :height 6cm :keepaspectratio
|
||||
[[./plot_percentage_vs_mkl_tiled_good.pdf]]
|
||||
|
||||
** Efficiently guiding the developer
|
||||
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[./maqao1.png]]
|
||||
** Extensive/automatic testing of different configurations
|
||||
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[./maqao2.png]]
|
||||
|
||||
** First application : 3-body Jastrow factor
|
||||
|
||||
#+LATEX: \newcommand{\Jeen}{J_{\text{een}}}
|
||||
@ -460,109 +514,14 @@ rc = qmckl_get_local_energy(context, &e_loc);
|
||||
#+LATEX: \begin{column}{0.5\textwidth}
|
||||
- Gradient and Laplacian are also required
|
||||
- Up to $20\times$ faster than in the original code
|
||||
- $\sim 80\%$ of the AVX-512 peak is reached using standard MKL on
|
||||
Intel Skylake
|
||||
- $\sim 80\%$ of the AVX-512 peak is reached
|
||||
- Expressed with a DGEMM kernel $\Longrightarrow$ also efficient on GPU
|
||||
#+LATEX: \end{column}
|
||||
#+LATEX: \end{columns}
|
||||
|
||||
** High-Performance strategies
|
||||
|
||||
*** Linear algebra hot spots
|
||||
|
||||
| GEMM | Rank-1 update | Matrix Inversion |
|
||||
| GEMV | Diagonal of GEMM | Shermann-Morrison-Woodburry |
|
||||
|
||||
*** Matrices are relatively small ($\le 1000\times 1000$)
|
||||
|
||||
- Matrices are stored in tiled format fitting a block formulation
|
||||
of the algorithms $\Longrightarrow$ task-based
|
||||
linear algebra, interleaved computation of multiple kernels
|
||||
- Tile sizes will be adjusted by auto-tuning
|
||||
- Increase parallelism by aggregating multiple independent walkers
|
||||
in matrices
|
||||
- Needs fast linear algebra kernels for small matrices (tile size)
|
||||
- For tiny matrices ($<5\times5$) specialized versions are implemented
|
||||
|
||||
** Example: Specialized DGEMM kernel I
|
||||
|
||||
*** Simple algorithm :B_block:BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_env: block
|
||||
:BEAMER_col: 0.45
|
||||
:END:
|
||||
- Simple micro kernel (*GotoDGEMM*\footnote{doi:10.1145/1356052.1356053})
|
||||
- Code written using ~asm_volatile~ to force good code generation by
|
||||
compilers
|
||||
- *Tiling* scheme\footnote{doi:10.1109/ICPP.2015.29}
|
||||
|
||||
*** Tiling scheme :B_block:BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.45
|
||||
:BEAMER_env: block
|
||||
:END:
|
||||
#+ATTR_LATEX: :width 5cm :height 5cm :keepaspectratio :right
|
||||
[[./tiling_icpp2015.pdf]]
|
||||
|
||||
** Example: Specialized DGEMM kernel II
|
||||
|
||||
*** Benchmarks
|
||||
|
||||
- Comparison of MKL vs Specialized DGEMM
|
||||
|
||||
#+ATTR_LATEX: :height 4cm :keepaspectratio
|
||||
[[./plot_percentage_vs_mkl_tiled_good.pdf]]
|
||||
|
||||
- Strong impact on MKL performance due to the number of consecutive executions
|
||||
- Favorable comparison for MKL: Many consecutive executions to
|
||||
amortize setup cost, JIT, Skylake CPU
|
||||
|
||||
** Why do we like our DGEMM?
|
||||
|
||||
- Open source code : can be modified easily
|
||||
- Simple code (280 LOC)
|
||||
- Decent performance with 10% of MKL
|
||||
- Can be rewritten in different languages to increase
|
||||
portability (MIPP\footnote{https://github.com/aff3ct/MIPP})
|
||||
- Can be coupled with simple pack/unpack routines to handle different
|
||||
data storage (tiled matrices)
|
||||
- Allows to keep control on parallelism
|
||||
- A good starting point for autotuning
|
||||
|
||||
** High-Performance strategies
|
||||
|
||||
*** Tuning
|
||||
- Optimization is guided by analysis with *MAQAO*\footnote{https://maqao.org}.
|
||||
- Specialized versions of critical hot-spots
|
||||
- *MIPP* for portable intrinsics / specialized code generation
|
||||
- Monitoring of the use of the library to choose most efficient versions
|
||||
- Optimizations guided by monitoring numerical accuracy (*Verificarlo*\footnote{https://github.com/verificarlo/verificarlo})
|
||||
|
||||
** Efficiently guiding the developer
|
||||
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[./maqao1.png]]
|
||||
** Extensive/automatic testing of different configurations
|
||||
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[./maqao2.png]]
|
||||
|
||||
* Summary
|
||||
|
||||
** Summary
|
||||
- QMC codes integrated in an ecosystem of multiple codes for
|
||||
high-accuracy quantum chemistry
|
||||
- Development of open-source libraries to be used in the
|
||||
TREX codes and beyond
|
||||
- Libraries focus on /performance/, /portability/ and /productivity/
|
||||
- Strategies to make the collaboration between physicists/chemists
|
||||
and HPC experts optimal
|
||||
|
||||
|
||||
* Bonus slides
|
||||
|
||||
#+INCLUDE: "verificarlo.tex" export latex
|
||||
|
||||
|
||||
#+LATEX: \end{frame}
|
||||
#+INCLUDE: "verificarlo.tex" export latex
|
||||
** Verificarlo CI
|
||||
|
||||
#+LATEX: \begin{columns}
|
||||
@ -584,6 +543,7 @@ rc = qmckl_get_local_energy(context, &e_loc);
|
||||
#+LATEX: \end{exampleblock}
|
||||
#+LATEX: \end{column}
|
||||
#+LATEX: \end{columns}
|
||||
|
||||
* Useful links :noexport:
|
||||
|
||||
| TREX web site | https://trex-coe.eu |
|
||||
@ -593,6 +553,28 @@ rc = qmckl_get_local_energy(context, &e_loc);
|
||||
| MAQAO | http://www.maqao.org |
|
||||
| Verificarlo | https://github.com/verificarlo/verificarlo |
|
||||
|
||||
* Export :noexport:
|
||||
#+BEGIN_SRC elisp :output none
|
||||
(setq org-latex-listings 'minted)
|
||||
(setq org-latex-custom-lang-environments
|
||||
'(
|
||||
(f90 "fortran")
|
||||
))
|
||||
(setq org-latex-minted-options
|
||||
'(("frame" "lines")
|
||||
("fontsize" "\\scriptsize")
|
||||
("linenos" "")))
|
||||
(setq org-latex-to-pdf-process
|
||||
'("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
|
||||
(org-beamer-export-to-pdf)
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
: /home/vijay/Documents/presentations/pres_intel/scemama.pdf
|
||||
|
||||
|
||||
* TODO [19/21] Improvements :noexport:
|
||||
|
||||
- [X] Fully parallelisable
|
||||
@ -639,27 +621,3 @@ together: perf et productivity
|
||||
- [X] On cherche de la perf within 10%. On en laisse sur la table
|
||||
|
||||
- [X] Multiple verions: CPU, GPU
|
||||
|
||||
* Export :noexport:
|
||||
#+BEGIN_SRC elisp :output none
|
||||
(setq org-latex-listings 'minted)
|
||||
(setq org-latex-custom-lang-environments
|
||||
'(
|
||||
(f90 "fortran")
|
||||
))
|
||||
(setq org-latex-minted-options
|
||||
'(("frame" "lines")
|
||||
("fontsize" "\\scriptsize")
|
||||
("linenos" "")))
|
||||
(setq org-latex-to-pdf-process
|
||||
'("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
|
||||
(org-beamer-export-to-pdf)
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
: /home/scemama/MEGA/TEX/Presentations/2021/Intel/scemama.pdf
|
||||
|
||||
|
||||
|
||||
|
382
scemama.tex
382
scemama.tex
@ -1,4 +1,4 @@
|
||||
% Created 2021-10-08 Fri 12:27
|
||||
% Created 2021-10-06 mer. 11:46
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[aspectratio=169]{beamer}
|
||||
\usepackage[utf8]{inputenc}
|
||||
@ -46,20 +46,20 @@ $^2$University of Versailles, Li-PaRAD (France)}
|
||||
pdftitle={Libraries developed in the TREX CoE},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 26.3 (Org mode 9.4)},
|
||||
pdfcreator={Emacs 27.1 (Org mode 9.5)},
|
||||
pdflang={English}}
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\section{QMC in TREX}
|
||||
\label{sec:orge5169ea}
|
||||
\begin{frame}[label={sec:org16615d0}]{QMC in TREX}
|
||||
\section{TREX: Targeting REal chemical accuracy at the EXascale}
|
||||
\label{sec:org4b839d0}
|
||||
\begin{frame}[label={sec:orgbdf1b22}]{TREX: Targeting REal chemical accuracy at the EXascale}
|
||||
\begin{exampleblock}{QMC: Quantum Monte Carlo methods}
|
||||
\begin{itemize}
|
||||
\item Highly accurate methods
|
||||
\item Massively parallelisable (multiple QMC trajectories)
|
||||
\item Very CPU intensive: One of the most "compute-hungry" methods
|
||||
\item Very CPU intensive: One of the most ``compute-hungry'' methods
|
||||
\item Still under development: scientists need to run \emph{and} develop code
|
||||
\item Input data is complex (wave function)
|
||||
\end{itemize}
|
||||
@ -75,7 +75,7 @@ How: Instead of re-writing codes, provide libraries (free software)
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgd8db692}]{Quantum Monte Carlo (QMC)}
|
||||
\begin{frame}[label={sec:orga6495e2}]{Quantum Monte Carlo (QMC)}
|
||||
\alert{Problem}: Stochastic resolution of the Schr\"odinger equation for $N$ electrons
|
||||
\begin{eqnarray}
|
||||
E &= &\frac{\int \dcoord \Phi(\coord) {\cal H} \Phi(\coord)}
|
||||
@ -101,15 +101,14 @@ E &= &\frac{\int \dcoord \Phi(\coord) {\cal H} \Phi(\coord)}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgcee35fc}]{Quantum Monte Carlo (QMC)}
|
||||
\begin{frame}[label={sec:org8ad33cb}]{Quantum Monte Carlo (QMC)}
|
||||
\begin{columns}
|
||||
\begin{column}{0.4\textwidth}
|
||||
\begin{itemize}
|
||||
\item Very low memory requirements (no integrals)
|
||||
\item Distribute walkers on different cores or compute nodes
|
||||
\item No blocking communication: near-ideal scaling
|
||||
\item Difficulty to parallelize within a QMC trajectory: depends on the
|
||||
number of electrons
|
||||
\item Difficulty: parallelize within a QMC trajectory
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\begin{column}{0.6\textwidth}
|
||||
@ -120,16 +119,15 @@ number of electrons
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org4bb2da0}]{Both libraries}
|
||||
\begin{frame}[label={sec:orgb43d37e}]{Both libraries}
|
||||
\begin{block}{Three objectives}
|
||||
\begin{enumerate}
|
||||
\item \alert{Productivity} \\
|
||||
Usable and useful by scientists in different programming languages
|
||||
Used and developed by scientists in different languages
|
||||
\item \alert{Portability} \\
|
||||
Target: all HPC systems (CPU, GPU, ARM, x86, etc.)
|
||||
\item \alert{Performance} \\
|
||||
Must be efficient on all architectures: possible tradeoffs
|
||||
between portability and performance
|
||||
Must be efficient on all architectures
|
||||
\end{enumerate}
|
||||
\end{block}
|
||||
|
||||
@ -142,8 +140,8 @@ between portability and performance
|
||||
\end{frame}
|
||||
|
||||
\section{TREXIO: I/O library}
|
||||
\label{sec:orga389b46}
|
||||
\begin{frame}[label={sec:org61be819}]{TREXIO: I/O library}
|
||||
\label{sec:orgbe916a5}
|
||||
\begin{frame}[label={sec:orgdf330cc}]{TREXIO: I/O library}
|
||||
\begin{columns}
|
||||
\begin{column}{0.4\textwidth}
|
||||
\begin{exampleblock}{Before}
|
||||
@ -162,10 +160,10 @@ between portability and performance
|
||||
\end{columns}
|
||||
|
||||
(BSD license) \\
|
||||
\url{https://github.com/trex-coe/trexio}
|
||||
\url{https://github.com/trex-coe/trexio}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org01dc873}]{TREXIO: I/O library}
|
||||
\begin{frame}[label={sec:orgaf241aa}]{TREXIO: I/O library}
|
||||
\begin{exampleblock}{Front end}
|
||||
\begin{itemize}
|
||||
\item Definition of an API for to read/write wave functions
|
||||
@ -194,7 +192,7 @@ between portability and performance
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org6f3aa58}]{Content of the files}
|
||||
\begin{frame}[label={sec:orgd025d67}]{Content of the files}
|
||||
\begin{itemize}
|
||||
\item File is \alert{self-contained}: no external knowledge needed to compute
|
||||
\(\Psi(r_1,\dots,r_n)\) (normalization factors, basis et
|
||||
@ -210,35 +208,66 @@ AO & MO & Two-electron integrals\\
|
||||
One-electron integrals & Density matrices & ECP\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\item Each group contains multiple \alert{attributes}: information related to the
|
||||
group
|
||||
\item Each group contains multiple \alert{attributes}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\section{QMCkl: QMC kernel library}
|
||||
\label{sec:org3669f0e}
|
||||
\begin{frame}[label={sec:org17b60da},fragile]{Source code}
|
||||
\begin{itemize}
|
||||
\item For each attribute :
|
||||
\begin{minted}[frame=lines,fontsize=\scriptsize,linenos]{c}
|
||||
trexio_exit_code trexio_[has/read/write]_<group>_<attribute>
|
||||
(trexio_t* file, <type> attribute)
|
||||
\end{minted}
|
||||
\item The library can be auto-generated by a script as the function names can
|
||||
be computed
|
||||
\item Productivity : Literate programming with Org-mode \\
|
||||
Table \(\rightarrow\) JSON \(\rightarrow\) C \\
|
||||
\phantom{Table} \(\rightarrow\) Documentation
|
||||
\item Fortran and Python/Numpy interfaces are also generated
|
||||
\item Performance : HDF5 back end
|
||||
\item Portability : Only optional dependency is HDF5
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org89970a2}]{QMC kernel library}
|
||||
\begin{frame}[label={sec:orgbaa9dcc}]{Source code}
|
||||
Productivity:
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=\textwidth]{./trexio-doc1.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgf8a4de9}]{Documentation}
|
||||
\begin{center}
|
||||
\includegraphics[height=\textheight]{./trexio-doc2.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\section{QMCkl: QMC kernel library}
|
||||
\label{sec:org8f7a589}
|
||||
|
||||
\begin{frame}[label={sec:orga61a195}]{QMC kernel library}
|
||||
\begin{block}{Computational kernels}
|
||||
\begin{itemize}
|
||||
\item QMCkl will contain the main kernels of QMC methods: Domain
|
||||
specific library, end-user driven
|
||||
\item QMCkl will contain the main kernels of QMC methods (Domain
|
||||
specific library, end-user driven)
|
||||
\item Written together by QMC experts and HPC experts
|
||||
\item Multiple high performance implementations of the kernels, tuned
|
||||
for different
|
||||
\begin{itemize}
|
||||
\item architectures: portability is critical for users
|
||||
\item problem sizes: from small to large systems
|
||||
\item requested accuracy: reduced precision
|
||||
\item architectures (portability is critical for users)
|
||||
\item problem sizes (from small to large systems)
|
||||
\item requested accuracy (reduced precision)
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org27f2ac6}]{Objectives}
|
||||
\begin{frame}[label={sec:orgde1dc38}]{Objectives}
|
||||
\begin{itemize}
|
||||
\item The code must stay easy to understand by the physicists/chemists.
|
||||
Performance-related aspects should be delegated to the library
|
||||
Performance-related aspects are delegated to the library
|
||||
\item Scientists should be able to use their preferred language
|
||||
\item Scientists should not lose control of their codes
|
||||
\item Codes should not die when the architecture changes
|
||||
@ -247,7 +276,7 @@ Performance-related aspects should be delegated to the library
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org7fe4d9a}]{Functionality and performance}
|
||||
\begin{frame}[label={sec:org511ef07}]{Functionality and performance}
|
||||
\begin{itemize}
|
||||
\item Keeping high \emph{productivity}, \emph{portability} and \emph{performance} is very
|
||||
hard in a single piece of software.
|
||||
@ -260,9 +289,7 @@ Easy to read, understand, modify for scientists, not necessarily efficient.
|
||||
\item \alert{High performance libraries} \\
|
||||
Efficient on a given architecture, but not necessarily
|
||||
readable by physicists/chemists. \\
|
||||
Performance within 10\% to maximize portability and simplicity.
|
||||
\item \alert{Ultra-High performance libraries} \\
|
||||
Generated with auto-tuning tools for well identified datasets.
|
||||
Performance within 10$\backslash$% to maximize portability and simplicity.
|
||||
\end{enumerate}
|
||||
|
||||
\item Both \emph{Documentation} and \emph{High performance} have the same API
|
||||
@ -275,10 +302,9 @@ implemented in the HPC versions when the API is stabilized.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgca18759},fragile]{Library design}
|
||||
\begin{frame}[label={sec:org858b4e8},fragile]{Library design}
|
||||
\begin{itemize}
|
||||
\item Creation of a \emph{Context} that keeps a consistent state of the
|
||||
library (pointers to computed data, configuration parameters, etc.)
|
||||
\item Creation of a \emph{Context} that keeps a consistent state of the library
|
||||
\item Memory allocation is abstract:
|
||||
\begin{minted}[frame=lines,fontsize=\scriptsize,linenos]{c}
|
||||
void* qmckl_malloc(qmckl_context context, const qmckl_memory_info_struct info);
|
||||
@ -288,33 +314,12 @@ allows allocation on CPU/GPU by the HPC variants
|
||||
context untouched (no allocation, no modification in-place)
|
||||
\item High-level functions: let the library call multiple kernels in an
|
||||
optimal way, possibly updating the context
|
||||
\item Use of IRP programming paradigm\footnote{http://arxiv.org/abs/0909.5012} to keep track of dependencies
|
||||
between kernels: re-compute only what is necessary and store
|
||||
computed data in the context
|
||||
\item Use of IRP programming paradigm to keep track of dependencies
|
||||
between kernels: re-compute only what is necessary
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org1c791dc}]{Dependencies between kernels}
|
||||
\begin{columns}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[width=.9\linewidth]{irp.png}
|
||||
\end{center}
|
||||
|
||||
\end{column}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{itemize}
|
||||
\item Only the needed sub-graph is computed
|
||||
\item HPC: Each kernel is one/many parallel Task(s)
|
||||
\item HPC: Use OpenMP tasks or StarPU\footnote{C. Augonnet et al, doi:10.1002/cpe.1631} for hybrid architectures:
|
||||
(StarPU handles very well asynchronous CPU-GPU transfers).
|
||||
\end{itemize}
|
||||
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org5202b14},fragile]{Use case: low-level}
|
||||
\begin{frame}[label={sec:orgaf195d6},fragile]{Use case: low-level}
|
||||
\begin{minted}[frame=lines,fontsize=\scriptsize,linenos]{c}
|
||||
#include <qmckl.h>
|
||||
|
||||
@ -337,7 +342,7 @@ assert (rc == QMCKL_SUCCESS);
|
||||
\end{minted}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org1ecca91},fragile]{Use case: high-level}
|
||||
\begin{frame}[label={sec:orgb573ec0},fragile]{Use case: high-level}
|
||||
\begin{minted}[frame=lines,fontsize=\scriptsize,linenos]{c}
|
||||
#include <qmckl.h>
|
||||
// ...
|
||||
@ -361,21 +366,133 @@ rc = qmckl_get_local_energy(context, &e_loc);
|
||||
\end{minted}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org3f3c8bf}]{Development strategy}
|
||||
\begin{frame}[label={sec:orgf244d95}]{Dependencies between kernels}
|
||||
\begin{columns}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[width=.9\linewidth]{irp.png}
|
||||
\end{center}
|
||||
|
||||
\end{column}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{itemize}
|
||||
\item Only the needed sub-graph is computed
|
||||
\item HPC: Each kernel is one/many parallel Task(s)
|
||||
\item HPC: Use OpenMP tasks or StarPU\footnote{C. Augonnet et al, doi:10.1002/cpe.1631} for hybrid architectures:
|
||||
(StarPU handles very well asynchronous CPU-GPU transfers).
|
||||
\end{itemize}
|
||||
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[label={sec:org2d8f7db}]{Development strategy}
|
||||
\begin{enumerate}
|
||||
\item Kernel extraction: QMC specialists agree on the
|
||||
mathematical expression of the problem
|
||||
\item A mini-application is written to find the optimal data layout
|
||||
with HPC experts from real-size examples
|
||||
\item The kernel is written in the documentation library
|
||||
\item The documentation library is linked in a QMC code to check
|
||||
correctness and numerical accuracy
|
||||
\item The documentation library is linked in a QMC code to check correctness
|
||||
\item HPC experts provide an HPC version of the kernel
|
||||
\item The HPC library is linked in the QMC codes of the CoE
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgb6a9085}]{First application : 3-body Jastrow factor}
|
||||
\begin{frame}[label={sec:org186f986}]{Documentation library}
|
||||
Literate programming with Org-mode:
|
||||
\begin{itemize}
|
||||
\item Comments are more important than code
|
||||
\item Can add graphics, \LaTeX formulas, tables, etc
|
||||
\item Documentation always synchronized with the code
|
||||
\item Some routines can be generated by embedded scripts
|
||||
\item Kernels are implemented in Fortran for readability
|
||||
\item The API is C-compatible: QMCkl appears like a C library
|
||||
\(\Longrightarrow\) can be used in all other languages
|
||||
\item Example: Prototyping in Julia
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org79ccfae}]{High-Performance strategies}
|
||||
\begin{block}{Linear algebra hot spots}
|
||||
\begin{center}
|
||||
\begin{tabular}{lll}
|
||||
GEMM & Rank-1 update & Matrix Inversion\\
|
||||
GEMV & Diagonal of GEMM & Shermann-Morrison-Woodburry\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Matrices are relatively small (\(\le 1000\times 1000\))}
|
||||
\begin{itemize}
|
||||
\item Matrices are stored in tiled format \(\Longrightarrow\) task-based
|
||||
linear algebra interleaved computation of multiple kernels
|
||||
\item Increase parallelism by aggregating multiple independent walkers
|
||||
in matrices
|
||||
\item Needs fast linear algebra kernels for small matrices
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgf0771f2}]{High-Performance strategies}
|
||||
\begin{block}{Tuning}
|
||||
\begin{itemize}
|
||||
\item Optimization is guided by analysis with \alert{MAQAO}\footnote{https://maqao.org}.
|
||||
\item Specialized versions of critical hot-spots
|
||||
\item MIPP for portable intrinsics / specialized code generation
|
||||
\item Monitoring of the use of the library to choose most efficient versions
|
||||
\item Optimizations guided by monitoring numerical accuracy (\alert{Verificarlo}\footnote{https://github.com/verificarlo/verificarlo})
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org750d177}]{Example: Specialized DGEMM kernel I}
|
||||
\begin{columns}
|
||||
\begin{column}{0.45\columnwidth}
|
||||
\begin{block}{Simple algorithm}
|
||||
\begin{itemize}
|
||||
\item Simple micro kernel (\alert{GotoDGEMM}\footnote{doi:10.1145/1356052.1356053})
|
||||
\item Code generation
|
||||
\item \alert{Tiling} scheme\footnote{doi:10.1109/ICPP.2015.29}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{column}
|
||||
|
||||
\begin{column}{0.45\columnwidth}
|
||||
\begin{block}{Tiling scheme}
|
||||
\begin{center}
|
||||
\includegraphics[width=5cm,height=5cm]{./tiling_icpp2015.pdf}
|
||||
\end{center}
|
||||
\end{block}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orged49595}]{Example: Specialized DGEMM kernel II}
|
||||
\begin{block}{Benchmarks}
|
||||
\begin{itemize}
|
||||
\item Comparison of MKL vs Specialied DGEMM
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=10cm,height=6cm]{./plot_percentage_vs_mkl_tiled_good.pdf}
|
||||
\end{center}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgd61c781}]{Efficiently guiding the developer}
|
||||
\begin{center}
|
||||
\includegraphics[width=\textwidth]{./maqao1.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
\begin{frame}[label={sec:orgacd8d69}]{Extensive/automatic testing of different configurations}
|
||||
\begin{center}
|
||||
\includegraphics[width=\textwidth]{./maqao2.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org3ef76e8}]{First application : 3-body Jastrow factor}
|
||||
\newcommand{\Jeen}{J_{\text{een}}}
|
||||
\newcommand{\Nel}{N_{\text{elec}}}
|
||||
\newcommand{\Nat}{N_{\text{nucl}}}
|
||||
@ -406,133 +523,14 @@ correctness and numerical accuracy
|
||||
\begin{itemize}
|
||||
\item Gradient and Laplacian are also required
|
||||
\item Up to \(20\times\) faster than in the original code
|
||||
\item \(\sim 80\%\) of the AVX-512 peak is reached using standard MKL on
|
||||
Intel Skylake
|
||||
\item \(\sim 80\%\) of the AVX-512 peak is reached
|
||||
\item Expressed with a DGEMM kernel \(\Longrightarrow\) also efficient on GPU
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
|
||||
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgd6d3e26}]{High-Performance strategies}
|
||||
\begin{block}{Linear algebra hot spots}
|
||||
\begin{center}
|
||||
\begin{tabular}{lll}
|
||||
GEMM & Rank-1 update & Matrix Inversion\\
|
||||
GEMV & Diagonal of GEMM & Shermann-Morrison-Woodburry\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Matrices are relatively small (\(\le 1000\times 1000\))}
|
||||
\begin{itemize}
|
||||
\item Matrices are stored in tiled format fitting a block formulation
|
||||
of the algorithms \(\Longrightarrow\) task-based
|
||||
linear algebra, interleaved computation of multiple kernels
|
||||
\item Tile sizes will be adjusted by auto-tuning
|
||||
\item Increase parallelism by aggregating multiple independent walkers
|
||||
in matrices
|
||||
\item Needs fast linear algebra kernels for small matrices (tile size)
|
||||
\item For tiny matrices (\(<5\times5\)) specialized versions are implemented
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgeb97339},fragile]{Example: Specialized DGEMM kernel I}
|
||||
\begin{columns}
|
||||
\begin{column}{0.45\columnwidth}
|
||||
\begin{block}{Simple algorithm}
|
||||
\begin{itemize}
|
||||
\item Simple micro kernel (\alert{GotoDGEMM}\footnote{doi:10.1145/1356052.1356053})
|
||||
\item Code written using \texttt{asm\_volatile} to force good code generation by
|
||||
compilers
|
||||
\item \alert{Tiling} scheme\footnote{doi:10.1109/ICPP.2015.29}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{column}
|
||||
|
||||
\begin{column}{0.45\columnwidth}
|
||||
\begin{block}{Tiling scheme}
|
||||
\begin{center}
|
||||
\includegraphics[width=5cm,height=5cm]{./tiling_icpp2015.pdf}
|
||||
\end{center}
|
||||
\end{block}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org76e8117}]{Example: Specialized DGEMM kernel II}
|
||||
\begin{block}{Benchmarks}
|
||||
\begin{itemize}
|
||||
\item Comparison of MKL vs Specialized DGEMM
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[height=4cm]{./plot_percentage_vs_mkl_tiled_good.pdf}
|
||||
\end{center}
|
||||
|
||||
\item Strong impact on MKL performance due to the number of consecutive executions
|
||||
\item Favorable comparison for MKL: Many consecutive executions to
|
||||
amortize setup cost, JIT, Skylake CPU
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:orgc7d8abc}]{Why do we like our DGEMM?}
|
||||
\begin{itemize}
|
||||
\item Open source code : can be modified easily
|
||||
\item Simple code (280 LOC)
|
||||
\item Decent performance with 10\% of MKL
|
||||
\item Can be rewritten in different languages to increase
|
||||
portability (MIPP\footnote{https://github.com/aff3ct/MIPP})
|
||||
\item Can be coupled with simple pack/unpack routines to handle different
|
||||
data storage (tiled matrices)
|
||||
\item Allows to keep control on parallelism
|
||||
\item A good starting point for autotuning
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org18a9bee}]{High-Performance strategies}
|
||||
\begin{block}{Tuning}
|
||||
\begin{itemize}
|
||||
\item Optimization is guided by analysis with \alert{MAQAO}\footnote{https://maqao.org}.
|
||||
\item Specialized versions of critical hot-spots
|
||||
\item \alert{MIPP} for portable intrinsics / specialized code generation
|
||||
\item Monitoring of the use of the library to choose most efficient versions
|
||||
\item Optimizations guided by monitoring numerical accuracy (\alert{Verificarlo}\footnote{https://github.com/verificarlo/verificarlo})
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org4489490}]{Efficiently guiding the developer}
|
||||
\begin{center}
|
||||
\includegraphics[width=\textwidth]{./maqao1.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
\begin{frame}[label={sec:orgddd3631}]{Extensive/automatic testing of different configurations}
|
||||
\begin{center}
|
||||
\includegraphics[width=\textwidth]{./maqao2.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\section{Summary}
|
||||
\label{sec:org30e04a5}
|
||||
|
||||
\begin{frame}[label={sec:org705d3cf}]{Summary}
|
||||
\begin{itemize}
|
||||
\item QMC codes integrated in an ecosystem of multiple codes for
|
||||
high-accuracy quantum chemistry
|
||||
\item Development of open-source libraries to be used in the
|
||||
TREX codes and beyond
|
||||
\item Libraries focus on \emph{performance}, \emph{portability} and \emph{productivity}
|
||||
\item Strategies to make the collaboration between physicists/chemists
|
||||
and HPC experts optimal
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\section{Bonus slides}
|
||||
\label{sec:orgb118e4f}
|
||||
|
||||
\begin{frame}[fragile]{Numerical analysis with Verificarlo}
|
||||
|
||||
|
||||
@ -631,10 +629,8 @@ vfc\_probe\_assert("Sherman-Morisson", "res", res, \tikzmark{target}1e-7)
|
||||
\draw[arrow]
|
||||
(targetex.south) to[out=-90,in=90] ([yshift=1.2ex, xshift=.5cm]{pic cs:target});
|
||||
\end{tikzpicture}
|
||||
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[label={sec:org560588a}]{Verificarlo CI}
|
||||
\begin{frame}[label={sec:org8e7bd27}]{Verificarlo CI}
|
||||
\begin{columns}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{exampleblock}{Compare runs}
|
||||
@ -661,4 +657,4 @@ variable distribution
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
\end{document}
|
||||
\end{document}
|
||||
|
@ -97,4 +97,4 @@ vfc\_probe\_assert("Sherman-Morisson", "res", res, \tikzmark{target}1e-7)
|
||||
(targetex.south) to[out=-90,in=90] ([yshift=1.2ex, xshift=.5cm]{pic cs:target});
|
||||
\end{tikzpicture}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user