build:linear_algebra
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
build:linear_algebra [2016/04/08 16:37] – [Linear algebra flavors] Yann Pouillon | build:linear_algebra [2019/08/26 12:29] (current) – Jean-Michel Beuken | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <WRAP important> | ||
+ | |||
====== Configuring linear algebra ====== | ====== Configuring linear algebra ====== | ||
Line 8: | Line 10: | ||
* the tremendous diversity of the available implementations, | * the tremendous diversity of the available implementations, | ||
- | It logically corresponds to the most complex core block of the build system. On one side, there are // | + | It logically corresponds to the most complex core block of the build system. On one side, there are // |
We have designed our implementation to cover the highest possible number of cases, while preserving a relative simplicity in the configuration of their parameters. For this, we have grouped the 3 above concepts under //flavors// that users select depending on their situations and preferences. | We have designed our implementation to cover the highest possible number of cases, while preserving a relative simplicity in the configuration of their parameters. For this, we have grouped the 3 above concepts under //flavors// that users select depending on their situations and preferences. | ||
- | Take your time to read this document | + | <WRAP tip> This document is best understood when consulted peacefully. Please take your time to read it and feel free to come back as many times as you wish.</ |
===== Linear algebra flavors ===== | ===== Linear algebra flavors ===== | ||
- | For sake of clarity, we provide here 3 different perspectives on the linear algebra flavors supported by Abinit and their relationships with the other concepts. The build system lets you configure linear algebra from each of these 3 perspectives, | + | For sake of clarity, we provide here 3 different perspectives on the linear algebra flavors supported by Abinit and their relationships with the other concepts. The build system lets you configure linear algebra from each of these 3 perspectives, |
+ | * a vendor-first approach, where the criterion is to use as many components as possible from the same vendor; | ||
+ | * an architecture-first approach, where the components are selected depending on which elements of the computer architecture are enabled (e.g. OpenMP, MPI, GPU, ...); | ||
+ | * a component-first approach, where you specify explicitly each linear algebra component (e.g. BLAS, LAPACK, ScaLAPACK, ...) you want to use. | ||
The following table lists the available flavors supported by Abinit and their relationships with the other relevant concepts: | The following table lists the available flavors supported by Abinit and their relationships with the other relevant concepts: | ||
Line 24: | Line 29: | ||
| atlas | [[http:// | | atlas | [[http:// | ||
| elpa2014 | [[http:// | | elpa2014 | [[http:// | ||
- | | elpa2014 | + | | elpa2015 |
+ | | elpa2016 | [[http:// | ||
+ | | elpa2017 | [[http:// | ||
| essl | [[http:// | | essl | [[http:// | ||
| magma10 | | magma10 | ||
| magma15 | | magma15 | ||
- | | mkl | [[http:// | + | | magma25 |
+ | | mkl | [[http:// | ||
| netlib | | netlib | ||
+ | | openblas | [[https:// | ||
| plasma1 | | plasma1 | ||
- | The following table links the serial and multicore architectures supported | + | Please refer to the instructions of each vendor listed above by clicking on the corresponding link to obtain information on how to install their linear algebra implementation. |
- | The following table summarizes | + | ===== Automatic detection ===== |
+ | |||
+ | By default, | ||
- | ^ Component ^ Type ^ Flavors | + | In the absence of any option, the build system will use an internal heuristic to look for linear algebra libraries and enable/ |
- | | blas | Mandatory | acml, asl, essl, atlas, mkl, netlib, openblas | Required by all other components | + | - If a compiler vendor has a preferred linear algebra implementation, it will be tried first. |
- | | lapack | + | |
- | | lapacke | + | |
- | | scalapack | Optional | + | |
- | | elpa | Optional | + | |
- | | plasma | + | |
- | | magma | Optional | + | |
- | By default, the build system | + | In all cases, the build system |
===== Linear algebra options ===== | ===== Linear algebra options ===== | ||
Line 54: | Line 62: | ||
You can tune the detection mechanism through the // | You can tune the detection mechanism through the // | ||
- | * by just specifying a plus-separated list of flavors, in which case the build system will figure out how to assign which flavor to which component; | + | * by just specifying a plus-separated list of flavors, in which case the build system will figure out how to assign which flavor to which component |
* architecture-wise, | * architecture-wise, | ||
* component-wise, | * component-wise, | ||
Line 60: | Line 68: | ||
Please note that you can only use one of these 3 methods at a time. Mixes are explicitly forbidden. Omitting an architectural item or a linear algebra component with the 2 latter methods will be equivalent to disabling this element. | Please note that you can only use one of these 3 methods at a time. Mixes are explicitly forbidden. Omitting an architectural item or a linear algebra component with the 2 latter methods will be equivalent to disabling this element. | ||
- | __Example 1__: | + | The other options provide hints to the build system and determine which kinds of tests will be performed: |
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | |||
+ | ===== Creating your own blend of flavors ===== | ||
+ | |||
+ | __Example__: | ||
< | < | ||
will cause the build system to look for OpenBLAS for the //blas// component and use Netlib for the other ones, i.e. //lapack// for the serial case and // | will cause the build system to look for OpenBLAS for the //blas// component and use Netlib for the other ones, i.e. //lapack// for the serial case and // | ||
- | __Example 2__: | + | ===== Architecture-first method ===== |
+ | |||
+ | __Example__: | ||
< | < | ||
- | will cause the build system to look for Atlas for //blas//, Netlib for //lapack// and // | + | will cause the build system to look for Atlas for //blas//, Netlib for //lapack// and // |
+ | |||
+ | The following table links the serial and multicore architectures supported by Abinit with the other relevant concepts: | ||
+ | |||
+ | ^ Architecture ^ Flavors ^ Components ^ | ||
+ | | serial | ||
+ | | openmp | ||
+ | | mpi | elpa2014, elpa2015, essl, mkl, netlib | ||
+ | | gpu | magma10, magma15 | ||
+ | |||
+ | ===== Component-first method ===== | ||
- | __Example 3__: | + | __Example__: |
< | < | ||
will cause the build system to look for the //blas//, //lapack// and //elpa// components, but not for // | will cause the build system to look for the //blas//, //lapack// and //elpa// components, but not for // | ||
- | The other options provide hints to the build system | + | The following table summarizes |
- | | + | |
- | | + | ^ Component ^ Type ^ Flavors |
- | | + | | blas | Mandatory | acml, asl, essl, atlas, mkl, netlib, openblas | Required in any case | |
- | | + | | lapack |
+ | | lapacke | ||
+ | | scalapack | Optional | ||
+ | | elpa | Optional | ||
+ | | plasma | ||
+ | | magma | Optional | ||
build/linear_algebra.1460133473.txt.gz · Last modified: 2016/04/08 16:37 by Yann Pouillon