ilaenv(3)

πŸ’« ilaenv(3) β€” Library Functions Manual πŸ’«

okay bestie, so this is ilaenv, a library function from the LAPACK manual and honestly? she's the vibe curator of the whole operation πŸŽ€ β€” she picks the tuning parameters that make LAPACK routines go brrr on your machine.


✨ NAME ✨

ilaenv β€” ilaenv: tuning parameters πŸ’…


🌸 SYNOPSIS 🌸

Functions

  • integer function ilaenv (ispec, name, opts, n1, n2, n3, n4) β€” ILAENV πŸ”₯

πŸ¦‹ Detailed Description πŸ’œ

Function Documentation

integer function ilaenv (integer ispec, character*( * ) name, character*( * ) opts, integer n1, integer n2, integer n3, integer n4)

ILAENV ✨

🫢 Purpose:

!>
!> ILAENV is called from the LAPACK routines to choose problem-dependent
!> parameters for the local environment.  See ISPEC for a description of
!> the parameters.
!>
!> ILAENV returns an INTEGER
!> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
!> if ILAENV < 0:  if ILAENV = -k, the k-th argument had an illegal value.
!>
!> This version provides a set of parameters which should give good,
!> but not optimal, performance on many of the currently available
!> computers.  Users are encouraged to modify this subroutine to set
!> the tuning parameters for their particular machine using the option
!> and problem size information in the arguments.
!>
!> This routine will not function correctly if it is converted to all
!> lower case.  Converting it to all upper case is allowed.
!>

ngl, the lowercase thing is serious β€” lowkey a glow-up in all caps is allowed, but lowercase is a no πŸ’€.


πŸŽ€ Parameters πŸŽ€

ISPEC

!>          ISPEC is INTEGER
!>          Specifies the parameter to be returned as the value of
!>          ILAENV.
!>          = 1: the optimal blocksize; if this value is 1, an unblocked
!>               algorithm will give the best performance.
!>          = 2: the minimum block size for which the block routine
!>               should be used; if the usable block size is less than
!>               this value, an unblocked routine should be used.
!>          = 3: the crossover point (in a block routine, for N less
!>               than this value, an unblocked routine should be used)
!>          = 4: the number of shifts, used in the nonsymmetric
!>               eigenvalue routines (DEPRECATED)
!>          = 5: the minimum column dimension for blocking to be used;
!>               rectangular blocks must have dimension at least k by m,
!>               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
!>          = 6: the crossover point for the SVD (when reducing an m by n
!>               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
!>               this value, a QR factorization is used first to reduce
!>               the matrix to a triangular form.)
!>          = 7: the number of processors
!>          = 8: the crossover point for the multishift QR method
!>               for nonsymmetric eigenvalue problems (DEPRECATED)
!>          = 9: maximum size of the subproblems at the bottom of the
!>               computation tree in the divide-and-conquer algorithm
!>               (used by xGELSD and xGESDD)
!>          =10: ieee infinity and NaN arithmetic can be trusted not to trap
!>          =11: infinity arithmetic can be trusted not to trap
!>          12 <= ISPEC <= 17:
!>               xHSEQR or related subroutines,
!>               see IPARMQ for detailed explanation
!>

so ISPEC is literally the "which parameter do you want" selector, and like β€” options 4 and 8 are flagged DEPRECATED, so clock that πŸ•°οΈ (respectfully, they're giving retired icon).

NAME

!>          NAME is CHARACTER*(*)
!>          The name of the calling subroutine, in either upper case or
!>          lower case.
!>

it's just the name of whoever's calling, upper or lower case both eat πŸ“

OPTS

!>          OPTS is CHARACTER*(*)
!>          The character options to the subroutine NAME, concatenated
!>          into a single character string.  For example, UPLO = 'U',
!>          TRANS = 'T', and DIAG = 'N' for a triangular routine would
!>          be specified as OPTS = 'UTN'.
!>

all the character options get smooshed into one string β€” 'UTN' in that example, iconic πŸŽ€

N1

!>          N1 is INTEGER
!>

N2

!>          N2 is INTEGER
!>

N3

!>          N3 is INTEGER
!>

N4

!>          N4 is INTEGER
!>          Problem dimensions for the subroutine NAME; these may not all
!>          be required.
!>

the problem dimensions bestie β€” not all of them are always needed πŸ’…


πŸ‘‘ Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

periodt, the whole squad πŸ’–


🌈 Further Details: 🌈

!>
!>  The following conventions have been used when calling ILAENV from the
!>  LAPACK routines:
!>  1)  OPTS is a concatenation of all of the character options to
!>      subroutine NAME, in the same order that they appear in the
!>      argument list for NAME, even if they are not used in determining
!>      the value of the parameter specified by ISPEC.
!>  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
!>      that they appear in the argument list for NAME.  N1 is used
!>      first, N2 second, and so on, and unused problem dimensions are
!>      passed a value of -1.
!>  3)  The parameter value returned by ILAENV is checked for validity in
!>      the calling subroutine.  For example, ILAENV is used to retrieve
!>      the optimal blocksize for STRTRI as follows:
!>
!>      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
!>      IF( NB.LE.1 ) NB = MAX( 1, N )
!>

okay so convention 1 is "keep the option order exactly, even the ones you don't use for this ISPEC" β€” fr fr, don't reorder πŸ’€. Convention 2 is "dimensions go in argument-list order, unused ones get -1". And convention 3 is "the caller checks the returned value is valid" β€” like the STRTRI blocksize example up there πŸ‘†, main character energy.

alsooo, Definition at line 161 of file ilaenv.f. β€” bookmark that if you're the type to go read the source (iykyk) πŸ“–

🧚 Author 🧚

Generated automatically by Doxygen for LAPACK from the source code. not me being a whole auto-generated girlypop 🫢


well bestie, that's the whole page ✨ β€” brought to you by LAPACK, Version 3.12.0, dated all the way back to the manual page footer, slay πŸ’…πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from