Visible to Intel only — GUID: GUID-DFC7AADB-706E-4931-A643-69747A64FC44
Visible to Intel only — GUID: GUID-DFC7AADB-706E-4931-A643-69747A64FC44
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.