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

Vector Arguments in Vector Math

Vector arguments of classic VM mathematical functions are passed in one-dimensional arrays with unit vector increment. It means that a vector of length n is passed contiguously in an array a whose values are defined as

a(1), a(2), ..., a(n)

.

Strided VM mathematical functions allow using positive increments for all input and output vector arguments.

To accommodate for arrays with other increments, or more complicated indexing, VM contains auxiliary Pack/Unpack functions that gather the array elements into a contiguous vector and then scatter them after the computation is complete.

Generally, if the vector elements are stored in a one-dimensional array a as

a(m1), a(m2), ..., a(mn)

and need to be regrouped into an array y as

y(k1), y(k2), ..., y(kn),

.

VM Pack/Unpack functions can use one of the following indexing methods:

Positive Increment Indexing

kj = 1 + incy * (j - 1), mj = 1 + inca * (j - 1), j = 1, ..., n.

.

Constraint: incy > 0 and inca > 0.

For example, setting incy = 1 specifies gathering array elements into a contiguous vector.

This method is similar to that used in BLAS, with the exception that negative and zero increments are not permitted.

Index Vector Indexing

kj = iy(j), mj = ia(j), j = 1 ,..., n .

.

where ia and iy are arrays of length n that contain index vectors for the input and output arrays a and y, respectively.

Mask Vector Indexing

Indices kj , mj are such that:

my(kj)  0, ma(mj)  0 , j = 1,..., n .

.

where ma and my are arrays that contain mask vectors for the input and output arrays a and y, respectively.

Related information