Developer Reference

Contents

p?labrd

Reduces the first
nb
rows and columns of a general rectangular matrix A to real bidiagonal form by an orthogonal/unitary transformation, and returns auxiliary matrices that are needed to apply the transformation to the unreduced part of A.

Syntax

void
pslabrd
(
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*nb
,
float
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
float
*d
,
float
*e
,
float
*tauq
,
float
*taup
,
float
*x
,
MKL_INT
*ix
,
MKL_INT
*jx
,
MKL_INT
*descx
,
float
*y
,
MKL_INT
*iy
,
MKL_INT
*jy
,
MKL_INT
*descy
,
float
*work
);
void
pdlabrd
(
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*nb
,
double
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
double
*d
,
double
*e
,
double
*tauq
,
double
*taup
,
double
*x
,
MKL_INT
*ix
,
MKL_INT
*jx
,
MKL_INT
*descx
,
double
*y
,
MKL_INT
*iy
,
MKL_INT
*jy
,
MKL_INT
*descy
,
double
*work
);
void
pclabrd
(
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*nb
,
MKL_Complex8
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
float
*d
,
float
*e
,
MKL_Complex8
*tauq
,
MKL_Complex8
*taup
,
MKL_Complex8
*x
,
MKL_INT
*ix
,
MKL_INT
*jx
,
MKL_INT
*descx
,
MKL_Complex8
*y
,
MKL_INT
*iy
,
MKL_INT
*jy
,
MKL_INT
*descy
,
MKL_Complex8
*work
);
void
pzlabrd
(
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*nb
,
MKL_Complex16
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
double
*d
,
double
*e
,
MKL_Complex16
*tauq
,
MKL_Complex16
*taup
,
MKL_Complex16
*x
,
MKL_INT
*ix
,
MKL_INT
*jx
,
MKL_INT
*descx
,
MKL_Complex16
*y
,
MKL_INT
*iy
,
MKL_INT
*jy
,
MKL_INT
*descy
,
MKL_Complex16
*work
);
Include Files
  • mkl_scalapack.h
Description
The
p?labrd
function
reduces the first
nb
rows and columns of a real/complex general
m
-by-
n
distributed matrix sub(
A
) =
A
(
ia
:
ia
+
m
-1
,
ja
:
ja
+
n
-1)
to upper or lower bidiagonal form by an orthogonal/unitary transformation
Q'* A * P
, and returns the matrices
X
and
Y
necessary to apply the transformation to the unreduced part of sub(
A
).
If
m
n
,
sub(
A
)
is reduced to upper bidiagonal form; if
m
<
n
,
sub(
A
)
is reduced to lower bidiagonal form.
This is an auxiliary
function
called by
p?gebrd
.
Input Parameters
m
(global) The number of rows in the distributed matrix
sub(
A
)
.
(
m
0)
.
n
(global) The number of columns in the distributed matrix sub(
A
).
(
n
0)
.
nb
(global)
The number of leading rows and columns of sub(
A
) to be reduced.
a
(local).
Pointer into the local memory to an array of size
lld_a
*
LOC
c
(
ja
+
n
-1)
.
On entry, this array contains the local pieces of the general distributed matrix sub(
A
).
ia
,
ja
(global) The row and column indices in the global matrix
A
indicating the first row and the first column of the matrix sub(
A
), respectively.
desca
(global and local) array of size
dlen_
. The array descriptor for the distributed matrix
A
.
ix
,
jx
(global) The row and column indices in the global matrix
X
indicating the first row and the first column of the matrix sub(
X
), respectively.
descx
(global and local) array of size
dlen_
. The array descriptor for the distributed matrix
X
.
iy
,
jy
(global) The row and column indices in the global matrix
Y
indicating the first row and the first column of the matrix sub(
Y
), respectively.
descy
(global and local) array of size
dlen_
. The array descriptor for the distributed matrix
Y
.
work
(local).
Workspace array of size
lwork
.
lwork
nb_a
+
nq
,
with
nq
=
numroc
(
n
+
mod
(
ia
-1,
nb_y
),
nb_y
,
mycol
,
iacol
,
npcol
)
iacol
=
indxg2p
(
ja
,
nb_a
,
mycol
,
csrc_a
,
npcol
)
indxg2p
and
numroc
are ScaLAPACK tool functions;
myrow
,
mycol
,
nprow
, and
npcol
can be determined by calling the
function
blacs_gridinfo
.
Output Parameters
a
(local)
On exit, the first
nb
rows and columns of the matrix are overwritten; the rest of the distributed matrix
sub(
A
)
is unchanged.
If
m
n
, elements on and below the diagonal in the first
nb
columns, with the array
tauq
, represent the orthogonal/unitary matrix
Q
as a product of elementary reflectors; and elements above the diagonal in the first
nb
rows, with the array
taup
, represent the orthogonal/unitary matrix
P
as a product of elementary reflectors.
If
m
<
n
, elements below the diagonal in the first
nb
columns, with the array
tauq
, represent the orthogonal/unitary matrix
Q
as a product of elementary reflectors, and elements on and above the diagonal in the first
nb
rows, with the array
taup
, represent the orthogonal/unitary matrix
P
as a product of elementary reflectors.
See
Application Notes
below.
d
(local).
Array of size
LOCr
(
ia
+min(
m,n
)-1)
if
m
n
;
LOCc
(
ja
+min(
m,n
)-1)
otherwise. The distributed diagonal elements of the bidiagonal distributed matrix
B
:
d
[
i
] =
A
(
ia
+
i
,
ja
+
i
),
i
= 0, 1, ..., size (
d
)-1
d
is tied to the distributed matrix
A
.
e
(local).
Array of size
LOCr
(
ia
+min(
m,n
)-1)
if
m
n
;
LOCc
(
ja
+min(
m,n
)-2)
otherwise. The distributed off-diagonal elements of the bidiagonal distributed matrix
B
:
if
m
n
,
e
[
i
] =
A
(
ia
+
i
,
ja
+
i+1
) for
i
= 0, 1, ...,
n
-2
;
if
m
<
n
,
e
[
i
] =
A
(
ia
+
i+1
,
ja
+
i
) for
i
= 0, 1, ...,
m
-2
.
e
is tied to the distributed matrix
A
.
tauq
,
taup
(local).
Array size
LOCc
(
ja
+min(
m
,
n
)-1) for
tauq
, size
LOCr
(
ia
+min(
m
,
n
)-1) for
taup
. The scalar factors of the elementary reflectors which represent the orthogonal/unitary matrix
Q
for
tauq
,
P
for
taup
.
tauq
and
taup
are tied to the distributed matrix
A
.
See
Application Notes
below.
x
(local)
Pointer into the local memory to an array of size
lld_x
*
nb
. On exit, the local pieces of the distributed
m
-by-
nb
matrix
X
(
ix
:
ix
+
m
-1
,
jx
:
jx
+
nb
-1)
required to update the unreduced part of sub(
A
).
y
(local).
Pointer into the local memory to an array of size
lld_y
*
nb
. On exit, the local pieces of the distributed
n
-by-
nb
matrix
Y
(
iy
:
iy
+
n
-1
,
jy
:
jy
+
nb
-1)
required to update the unreduced part of sub(
A
).
Application Notes
The matrices
Q
and
P
are represented as products of elementary reflectors:
Q
=
H
(1)*
H
(2)*...*
H
(
nb
)
, and
P
=
G
(1)*
G
(2)*...*
G
(
nb
)
Each
H
(i)
and
G
(i)
has the form:
H
(i) =
I
-
tauq
*
v
*
v'
, and
G
(i) =
I
-
taup
*
u
*
u'
,
where
tauq
and
taup
are real/complex scalars, and
v
and
u
are real/complex vectors.
If
m
n
,
v
(1:
i
-1 ) = 0,
v
(
i
) = 1
, and
v
(
i
:
m
)
is stored on exit in
A
(
ia
+
i
-1:
ia
+
m
-1,
ja
+
i
-1)
;
u
(1:
i
) = 0,
u
(
i
+1 ) = 1
, and
u
(
i
+1:
n
)
is stored on exit in
A
(
ia
+
i
-1,
ja
+
i
:
ja
+
n
-1)
;
tauq
is stored in
tauq
[
ja
+
i
-2]
and
taup
in
taup
[
ia
+
i
-2]
.
If
m
<
n
,
v
(1:
i
) = 0
,
v
(
i
+1 ) = 1
, and
v
(
i+
1:
m
)
is stored on exit in
A
(
ia
+
i+
1:
ia
+
m
-1,
ja
+
i
-1)
;
u
(1:
i
-1 ) = 0
,
u
(
i
) = 1
, and
u
(
i
:
n
)
is stored on exit in
A
(
ia
+
i
-1
,
ja
+
i
:
ja
+
n
-1)
;
tauq
is stored in
tauq
[
ja
+
i
-2]
and
taup
in
taup
[
ia
+
i
-2]
. The elements of the vectors
v
and
u
together form the
m
-by-
nb
matrix
V
and the
nb
-by-
n
matrix
U'
which are necessary, with
X
and
Y
, to apply the transformation to the unreduced part of the matrix, using a block update of the form:
sub(
A
):= sub(
A
) -
V*Y'
-
X*U'
.
The contents of
sub(
A
)
on exit are illustrated by the following examples with
nb
= 2
:
Equation
where
a
denotes an element of the original matrix which is unchanged,
vi
denotes an element of the vector defining
H
(
i
)
, and
ui
an element of the vector defining
G
(
i
)
.

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