Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

mkl_?omatcopy2

Performs two-strided scaling and out-of-place transposition/copying of matrices.

Syntax

call mkl_somatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_domatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_comatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_zomatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

Include Files

  • mkl.fi

Description

The mkl_?omatcopy2 routine performs two-strided scaling and out-of-place transposition/copying of matrices. A transposition operation can be a normal matrix copy, a transposition, a conjugate transposition, or just a conjugation. The operation is defined as follows:

B := alpha*op(A)

Normally, matrices in the BLAS or LAPACK are specified by a single stride index. For instance, in the column-major order, A(2,1) is stored in memory one element away from A(1,1), but A(1,2) is a leading dimension away. The leading dimension in this case is at least the number of rows of the source matrix. If a matrix has two strides, then both A(2,1) and A(1,2) may be an arbitrary distance from A(1,1).

Parameter descriptions are common for all implemented interfaces with the exception of data types that refer here to the FORTRAN 77 standard types. Data types specific to the different interfaces are described in the section "Interfaces" below.

NOTE:

Different arrays must not overlap.

Input Parameters

ordering

CHARACTER*1. Ordering of the matrix storage.

If ordering = 'R' or 'r', the ordering is row-major.

If ordering = 'C' or 'c', the ordering is column-major.

trans

CHARACTER*1. Parameter that specifies the operation type.

If trans = 'N' or 'n', op(A)=A and the matrix A is assumed unchanged on input.

If trans = 'T' or 't', it is assumed that A should be transposed.

If trans = 'C' or 'c', it is assumed that A should be conjugate transposed.

If trans = 'R' or 'r', it is assumed that A should be only conjugated.

If the data is real, then trans = 'R' is the same as trans = 'N', and trans = 'C' is the same as trans = 'T'.

rows

INTEGER. number of rows for the input matrix A. Must be at least zero.

cols

INTEGER. Number of columns for the input matrix A. Must be at least zero.

alpha

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Scaling factor for the matrix transposition or copy.

a

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array holding the input matrix A. Must have size at least lda * n for column major ordering and at least lda * m for row major ordering.

lda

INTEGER.

Leading dimension of the matrix A. If matrices are stored using column major layout, lda is the number of elements in the array between adjacent columns of the matrix and must be at least stridea * (m-1) + 1. If using row major layout, lda is the number of elements between adjacent rows of the matrix and must be at least stridea * (n-1) + 1.

stridea

INTEGER.

The second stride of the matrix A. For column major layout, stridea is the number of elements in the array between adjacent rows of the matrix. For row major layout stridea is the number of elements between adjacent columns of the matrix. In both cases stridea must be at least 1.

b

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array holding the output matrix B.

  trans = transpose::nontrans trans = transpose::trans, or trans = transpose::conjtrans
Column major B is m x n matrix. Size of array b must be at least ldb * n. B is n x m matrix. Size of array b must be at least ldb * m.
Row major B is m x n matrix. Size of array b must be at least ldb * m. B is n x m matrix. Size of array b must be at least ldb * n.
ldb

INTEGER.

The leading dimension of the matrix B. Must be positive.

  trans = transpose::nontrans trans = transpose::trans, or trans = transpose::conjtrans
Column major ldb must be at least strideb * (m-1) + 1. ldb must be at least strideb * (n-1) + 1.
Row major ldb must be at least strideb * (n-1) + 1. ldb must be at least strideb * (m-1) + 1.
strideb

INTEGER.

The second stride of the matrix B. For column major layout, strideb is the number of elements in the array between adjacent rows of the matrix. For row major layout, strideb is the number of elements between adjacent columns of the matrix. In both cases strideb must be at least 1.

Output Parameters

b

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array, size at least m.

Contains the destination matrix.

Interfaces

FORTRAN 77:

SUBROUTINE mkl_somatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   REAL  alpha, b(*), a(*)

SUBROUTINE mkl_domatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   DOUBLE PRECISION alpha, b(*), a(*)

SUBROUTINE mkl_comatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   COMPLEX alpha, b(*), a(*)

SUBROUTINE mkl_zomatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   DOUBLE COMPLEX alpha, b(*), a(*)