User Tools

Site Tools


build:linear_algebra

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
build:linear_algebra [2017/04/11 10:40] Yann Pouillonbuild:linear_algebra [2019/08/26 14:29] (current) Jean-Michel Beuken
Line 1: Line 1:
-<WRAP important>**IMPORTANT** \\ The information provided in this page is valid for Abinit 8.and future versions only.</WRAP>+<WRAP important>**IMPORTANT** \\ The information provided in this page is valid for Abinit 8.and future versions only.</WRAP>
  
 ====== Configuring linear algebra ====== ====== Configuring linear algebra ======
Line 18: Line 18:
 ===== 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, mainly by setting its //with_linalg_flavor// option in different ways (explained in detail below).+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, mainly by setting its //with_linalg_flavor// option in different ways (explained in detail below). You can choose between: 
 +  * 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 27: Line 30:
 | elpa2014 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2014]] | mpi | elpa | | elpa2014 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2014]] | mpi | elpa |
 | elpa2015 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2015]] | mpi | elpa | | elpa2015 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2015]] | mpi | elpa |
 +| elpa2016 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2016]] | mpi | elpa |
 +| elpa2017 | [[http://www.mpcdf.mpg.de/|MPCDF]] | [[http://elpa.mpcdf.mpg.de/|ELPA 2017]] | mpi | elpa |
 | essl     | [[http://www.ibm.com/|IBM]] | [[https://www-03.ibm.com/systems/power/software/essl/|ESSL]] | serial, openmp, mpi | blas, lapack, scalapack | | essl     | [[http://www.ibm.com/|IBM]] | [[https://www-03.ibm.com/systems/power/software/essl/|ESSL]] | serial, openmp, mpi | blas, lapack, scalapack |
 | magma10  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/magma/|MAGMA 1.0]] | gpu | magma | | magma10  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/magma/|MAGMA 1.0]] | gpu | magma |
 | magma15  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/magma/|MAGMA 1.5]] | gpu | magma | | magma15  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/magma/|MAGMA 1.5]] | gpu | magma |
-| mkl      | [[http://developer.intel.com/|Intel]] | [[https://software.intel.com/en-us/intel-mkl|MKL]] | serial, mpi | blas, lapack, scalapack |+| magma25  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/magma/|MAGMA 2.5]] | gpu | magma | 
 +| mkl      | [[http://developer.intel.com/|Intel]] | [[https://software.intel.com/en-us/intel-mkl|MKL]] | serial, openmp, mpi | blas, lapack, scalapack |
 | netlib   | [[http://netlib.org/|Netlib]] | [[http://netlib.org/liblist.html|Netlib Repository]] | serial, mpi | blas, lapack, lapacke, scalapack | | netlib   | [[http://netlib.org/|Netlib]] | [[http://netlib.org/liblist.html|Netlib Repository]] | serial, mpi | blas, lapack, lapacke, scalapack |
 | openblas | [[https://github.com/xianyi|Zhang Xianyi]] | [[http://www.openblas.net/|OpenBLAS]] | serial | blas | | openblas | [[https://github.com/xianyi|Zhang Xianyi]] | [[http://www.openblas.net/|OpenBLAS]] | serial | blas |
 | plasma1  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/plasma/|PLASMA]] | openmp | plasma | | plasma1  | [[http://www.icl.cs.utk.edu/|UTK]] | [[http://icl.cs.utk.edu/plasma/|PLASMA]] | openmp | plasma |
  
-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.+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.
  
 ===== Automatic detection ===== ===== Automatic detection =====
  
-If you do not specify any linear algebra option, the build system will use an internal heuristic to look for linear algebra libraries and enable/disable components depending on the following criteria:+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. 
 + 
 +In the absence of any option, the build system will use an internal heuristic to look for linear algebra libraries and enable/disable components depending on the following criteria:
   - If a compiler vendor has a preferred linear algebra implementation, it will be tried first.   - If a compiler vendor has a preferred linear algebra implementation, it will be tried first.
   - If a build framework such as [[https://hpcugent.github.io/easybuild/|EasyBuild]] is present, it will be used to set the libraries.   - If a build framework such as [[https://hpcugent.github.io/easybuild/|EasyBuild]] is present, it will be used to set the libraries.
Line 45: Line 53:
   - If everything else fails, the build system will look for a standard Netlib implementation available system-wide.   - If everything else fails, the build system will look for a standard Netlib implementation available system-wide.
  
-This selection and detection process is optimized to work in the most common cases. If you have a customized linear algebra configuration, you will likely want to use some options to direct the build system to the right libraries.+In all cases, the build system will try to mitigate side-effects on other components, e.g. FFT, but there is no guarantee that it will succeed by itself. This selection and detection process is known to work in the most common cases. If you have a customized linear algebra configuration, you will likely want to use some options to direct the build system to the right libraries and give it instructions to minimize side-effects.
  
 ===== Linear algebra options ===== ===== Linear algebra options =====
Line 54: Line 62:
  
 You can tune the detection mechanism through the //with_linalg_flavor// option in 3 ways: You can tune the detection mechanism through the //with_linalg_flavor// option in 3 ways:
-  * 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 and complain about inconsistencies;
   * architecture-wise, by specifying a comma-separated list of //arch:value// statements, where //arch// can be //serial//, //openmp//, //mpi//, or //gpu//, and //value// is a plus-separated list of flavors;   * architecture-wise, by specifying a comma-separated list of //arch:value// statements, where //arch// can be //serial//, //openmp//, //mpi//, or //gpu//, and //value// is a plus-separated list of flavors;
   * component-wise, by specifying a comma-separated list of //component:value// statements, where //component// is one of the keywords from the first column of the above table, and //value// is a corresponding flavor -- only one is permitted in this case.   * component-wise, by specifying a comma-separated list of //component:value// statements, where //component// is one of the keywords from the first column of the above table, and //value// is a corresponding flavor -- only one is permitted in this case.
build/linear_algebra.1491900048.txt.gz · Last modified: 2017/04/11 10:40 by Yann Pouillon