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:40] – [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 the linear algebra components supported by Abinit and their relationships with the other relevant concepts: | + | ===== Automatic detection ===== |
- | ^ Component ^ Type ^ Flavors | + | By default, the build system assumes that you want the fastest possible linear algebra operations. When no linear algebra option is specified, it thus looks for each component as soon as its prerequisites are met. The only required components are BLAS and LAPACK, since Abinit relies on them in each and every situation. Unless forced by the user, the other components are enabled only if their prerequisites are met, their detection succeeds, and are proved working. |
- | | blas | Mandatory | acml, asl, essl, atlas, mkl, netlib, openblas | Required in any case | | + | |
- | | lapack | + | In the absence of any option, the build system will use an internal heuristic to look for linear algebra libraries and enable/ |
- | | 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 // |
- | __Example 3__: | + | 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__: | ||
< | < | ||
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.1460133615.txt.gz · Last modified: 2016/04/08 16:40 by Yann Pouillon