Contents

p?syevr

Computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix using Relatively Robust Representation.

Syntax

void pssyevr
(
char*
jobz
,
char*
range
,
char*
uplo
,
MKL_INT*
n
,
float*
a
,
MKL_INT*
ia
,
MKL_INT*
ja
,
MKL_INT*
desca
,
float*
vl
,
float*
vu
,
MKL_INT*
il
,
MKL_INT*
iu
,
MKL_INT*
m
,
MKL_INT*
nz
,
float*
w
,
float*
z
,
MKL_INT*
iz
,
MKL_INT*
jz
,
MKL_INT*
descz
,
float*
work
,
MKL_INT*
lwork
,
MKL_INT*
iwork
,
MKL_INT*
liwork
,
MKL_INT*
info
);
void pdsyevr
(
char*
jobz
,
char*
range
,
char*
uplo
,
MKL_INT*
n
,
double*
a
,
MKL_INT*
ia
,
MKL_INT*
ja
,
MKL_INT*
desca
,
double*
vl
,
double*
vu
,
MKL_INT*
il
,
MKL_INT*
iu
,
MKL_INT*
m
,
MKL_INT*
nz
,
double*
w
,
double*
z
,
MKL_INT*
iz
,
MKL_INT*
jz
,
MKL_INT*
descz
,
double*
work
,
MKL_INT*
lwork
,
MKL_INT*
iwork
,
MKL_INT*
liwork
,
MKL_INT*
info
);
Include Files
  • mkl_scalapack.h
Description
p?syevr
computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix
A
distributed in 2D blockcyclic format by calling the recommended sequence of ScaLAPACK
functions
.
First, the matrix
A
is reduced to real symmetric tridiagonal form. Then, the eigenproblem is solved using the parallel MRRR algorithm. Last, if eigenvectors have been computed, a backtransformation is done.
Upon successful completion, each processor stores a copy of all computed eigenvalues in
w
. The eigenvector matrix
z
is stored in 2D block-cyclic format distributed over all processors.
Note that subsets of eigenvalues/vectors can be selected by specifying a range of values or a range of indices for the desired eigenvalues.
Optimization Notice
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804
This notice covers the following instruction sets: SSE2, SSE4.2, AVX2, AVX-512.
Input Parameters
jobz
(global)
Specifies whether or not to compute the eigenvectors:
= 'N': Compute eigenvalues only.
= 'V': Compute eigenvalues and eigenvectors.
range
(global)
= 'A': all eigenvalues will be found.
= 'V': all eigenvalues in the interval [
vl
,
vu
] will be found.
= 'I': the
il
-th through
iu
-th eigenvalues will be found.
uplo
(global)
Specifies whether the upper or lower triangular part of the symmetric matrix
A
is stored:
= 'U': Upper triangular
= 'L': Lower triangular
n
(global )
The number of rows and columns of the matrix
a
.
n
0
a
Block cyclic array of global size
n
*
n
)
, local size
lld_a
*
LOC
c
(
ja
+
n
-1)
.
This array contains the local pieces of the symmetric distributed matrix
A
. If
uplo
= 'U', only the upper triangular part of
a
is used to define the elements of the symmetric matrix. If
uplo
= 'L', only the lower triangular part of
a
is used to define the elements of the symmetric matrix.
On exit, the lower triangle (if
uplo
='L') or the upper triangle (if
uplo
='U') of
a
, including the diagonal, is destroyed.
ia
(global )
Global row index in the global matrix
A
that points to the beginning of the submatrix which is to be operated on. It should be set to 1 when operating on a full matrix.
ja
(global )
Global column index in the global matrix
A
that points to the beginning of the submatrix which is to be operated on. It should be set to 1 when operating on a full matrix.
desca
(global and local) array of size
dlen_
=9.
The array descriptor for the distributed matrix
a
.
vl
(global )
If
range
='V', the lower bound of the interval to be searched for eigenvalues. Not referenced if
range
= 'A' or 'I'.
vu
(global )
If
range
='V', the upper bound of the interval to be searched for eigenvalues. Not referenced if
range
= 'A' or 'I'.
il
(global )
If
range
='I', the index (from smallest to largest) of the smallest eigenvalue to be returned.
il
1.
Not referenced if
range
= 'A'.
iu
(global )
If
range
='I', the index (from smallest to largest) of the largest eigenvalue to be returned. min(
il
,
n
)
iu
n
.
Not referenced if
range
= 'A'.
iz
(global )
Global row index in the global matrix
Z
that points to the beginning of the submatrix which is to be operated on. It should be set to 1 when operating on a full matrix.
jz
(global )
Global column index in the global matrix
Z
that points to the beginning of the submatrix which is to be operated on. It should be set to 1 when operating on a full matrix.
descz
array of size
dlen_
.
The array descriptor for the distributed matrix
z
.
The context
descz
[
ctxt_
- 1]
must equal
desca
[
ctxt_
- 1]
. Also note the array alignment requirements specified below.
work
(local workspace) array of size
lwork
lwork
(local )
Size of
work
, must be at least 3.
See below for definitions of variables used to define
lwork
.
If no eigenvectors are requested (
jobz
= 'N') then
lwork
2 + 5*
n
+ max( 12 *
nn
,
neig
* (
np0
+ 1 ) )
If eigenvectors are requested (
jobz
= 'V' ) then the amount of workspace required is:
lwork
2 + 5*
n
+ max( 18*
nn
,
np0
*
mq0
+ 2 *
neig
*
neig
) + (2 +
iceil
(
neig
,
nprow
*
npcol
))*
nn
Variable definitions:
neig
= number of eigenvectors requested
nb
=
desca
[
mb_
- 1]
=
desca
(
nb_
) =
descz
[
mb_
- 1]
=
descz
(
nb_
)
nn
= max(
n
,
neig
, 2 )
desca
[
rsrc_
- 1]
=
desca
[
csrc_
nb_
- 1]
=
descz
[
rsrc_
- 1]
=
descz
[
csrc_
- 1]
= 0
np0
=
numroc
(
nn
,
neig
, 0, 0,
nprow
)
mq0
=
numroc
( max(
neig
,
neig
, 2 ),
neig
, 0, 0,
npcol
)
iceil
(
x
,
y
) is a ScaLAPACK function returning ceiling(
x
/
y
), and
nprow
and
npcol
can be determined by calling the
function
blacs_gridinfo
.
If
lwork
= -1, then
lwork
is global input and a workspace query is assumed; the
function
only calculates the size required for optimal performance for all work arrays. Each of these values is returned in the first entry of the corresponding work arrays, and no error message is issued by pxerbla .
liwork
(local )
size of
iwork
Let
nnp
= max(
n
,
nprow
*
npcol
+ 1, 4 ). Then:
liwork
12*
nnp
+ 2*
n
when the eigenvectors are desired
liwork
10*
nnp
+ 2*
n
when only the eigenvalues have to be computed
If
liwork
= -1, then
liwork
is global input and a workspace query is assumed; the
function
only calculates the minimum and optimal size for all work arrays. Each of these values is returned in the first entry of the corresponding work array, and no error message is issued by
pxerbla
.
OUTPUT Parameters
m
(global )
Total number of eigenvalues found. 0
m
n
.
nz
(global )
Total number of eigenvectors computed. 0
nz
m
.
The number of columns of
z
that are filled.
If
jobz
'V',
nz
is not referenced.
If
jobz
= 'V',
nz
=
m
w
(global ) array of size
n
Upon successful exit, the first
m
entries contain the selected eigenvalues in ascending order.
z
Block-cyclic array, global size
n
*
n
, local size
lld_z
*
LOC
c
(
jz
+
n
-1)
.
On exit, contains local pieces of distributed matrix
Z
.
work
On return,
work
[0]
contains the optimal amount of workspace required for efficient execution. If
jobz
='N'
work
[0]
= optimal amount of workspace required to compute the eigenvalues. If
jobz
='V'
work
[0]
= optimal amount of workspace required to compute eigenvalues and eigenvectors.
iwork
(local workspace) array
On return,
iwork
[0]
contains the amount of integer workspace required.
info
(global )
= 0: successful exit
< 0: If the
i
-th argument is an array and the
j
th-entry had an illegal value, then
info
= -(
i
*100+
j
), if the
i
-th argument is a scalar and had an illegal value, then
info
= -
i
.
Application Notes
The distributed submatrices
a
(
ia
:*,
ja
:*) and
z
(
iz
:
iz
+
m
-1,
jz
:
jz
+
n
-1) must satisfy the following alignment properties:
  1. Identical (quadratic) dimension:
    desca
    [
    m_
    - 1]
    =
    descz
    [
    m_
    - 1]
    =
    desca
    [
    n_
    - 1]
    =
    descz
    [
    n_
    - 1]
  2. Quadratic conformal blocking:
    desca
    [
    mb_
    - 1]
    =
    desca
    [
    nb_
    - 1]
    =
    descz
    [
    mb_
    - 1]
    =
    descz
    [
    nb_
    - 1]
    ,
    desca
    [
    rsrc_
    - 1]
    =
    descz
    [
    rsrc_
    - 1]
  3. mod(
    ia
    -1,
    mb_a
    ) = mod(
    iz
    -1,
    mb_z
    ) = 0
mod(
x
,
y
)
is the integer remainder of
x
/
y
.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804