Functions for performing fast math on vectors of numbers, using SIMD (SSE, AVX, ...) instructions if available.
Neither input nor output vectors are required to have any particular memory alignment. Nevertheless, performance may be improved if vectors are 16-byte aligned for SSE, and 32-byte aligned for AVX.
Data Structures | |
struct | UINT4VectorAligned |
A special UINT4Vector with n-byte aligned memory data array. More... | |
struct | REAL4VectorAligned |
A special REAL4Vector with n-byte aligned memory data array. More... | |
struct | REAL8VectorAligned |
A special REAL8Vector with n-byte aligned memory data array. More... | |
struct | COMPLEX8VectorAligned |
A special COMPLEX8Vector with n-byte aligned memory data array. More... | |
struct | COMPLEX16VectorAligned |
A special COMPLEX16Vector with n-byte aligned memory data array. More... | |
Vector Math Functions | |
int | XLALVectorINT4FromREAL4 (INT4 *out, const REAL4 *in, const UINT4 len) |
Cast (i.e. More... | |
int | XLALVectorSinREAL4 (REAL4 *out, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \sin(\text{in})\) over REAL4 vectors out , in with len elements. More... | |
int | XLALVectorCosREAL4 (REAL4 *out, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \cos(\text{in})\) over REAL4 vectors out , in with len elements. More... | |
int | XLALVectorExpREAL4 (REAL4 *out, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \exp(\text{in})\) over REAL4 vectors out , in with len elements. More... | |
int | XLALVectorLogREAL4 (REAL4 *out, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \log(\text{in})\) over REAL4 vectors out , in with len elements. More... | |
int | XLALVectorRoundREAL4 (REAL4 *out, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = round ( \text{in} )\) over REAL4 vectors out , in with len elements. More... | |
int | XLALVectorRoundREAL8 (REAL8 *out, const REAL8 *in, const UINT4 len) |
Compute \(\text{out} = round ( \text{in} )\) over REAL8 vectors out , in with len elements. More... | |
int | XLALVectorSinCosREAL4 (REAL4 *out1, REAL4 *out2, const REAL4 *in, const UINT4 len) |
Compute \(\text{out1} = \sin(\text{in}), \text{out2} = \cos(\text{in})\) over REAL4 vectors out1 , out2 , in with len elements. More... | |
int | XLALVectorSinCos2PiREAL4 (REAL4 *out1, REAL4 *out2, const REAL4 *in, const UINT4 len) |
Compute \(\text{out1} = \sin(2\pi \text{in}), \text{out2} = \cos(2\pi \text{in})\) over REAL4 vectors out1 , out2 , in with len elements. More... | |
Vector by Vector Operations | |
int | XLALVectorAddREAL4 (REAL4 *out, const REAL4 *in1, const REAL4 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} + \text{in2}\) over REAL4 vectors in1 and in2 with len elements. More... | |
int | XLALVectorSubREAL4 (REAL4 *out, const REAL4 *in1, const REAL4 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} - \text{in2}\) over REAL4 vectors in1 and in2 with len elements. More... | |
int | XLALVectorMultiplyREAL4 (REAL4 *out, const REAL4 *in1, const REAL4 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} \times \text{in2}\) over REAL4 vectors in1 and in2 with len elements. More... | |
int | XLALVectorMaxREAL4 (REAL4 *out, const REAL4 *in1, const REAL4 *in2, const UINT4 len) |
Compute \(\text{out} = max ( \text{in1}, \text{in2} )\) over REAL4 vectors in1 and in2 with len elements. More... | |
int | XLALVectorAddREAL8 (REAL8 *out, const REAL8 *in1, const REAL8 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} + \text{in2}\) over REAL8 vectors in1 and in2 with len elements. More... | |
int | XLALVectorSubREAL8 (REAL8 *out, const REAL8 *in1, const REAL8 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} - \text{in2}\) over REAL8 vectors in1 and in2 with len elements. More... | |
int | XLALVectorMultiplyREAL8 (REAL8 *out, const REAL8 *in1, const REAL8 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} \times \text{in2}\) over REAL8 vectors in1 and in2 with len elements. More... | |
int | XLALVectorMaxREAL8 (REAL8 *out, const REAL8 *in1, const REAL8 *in2, const UINT4 len) |
Compute \(\text{out} = max ( \text{in1}, \text{in2} )\) over REAL8 vectors in1 and in2 with len elements. More... | |
int | XLALVectorMultiplyCOMPLEX8 (COMPLEX8 *out, const COMPLEX8 *in1, const COMPLEX8 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} \times \text{in2}\) over COMPLEX8 vectors in1 and in2 with len elements. More... | |
int | XLALVectorAddCOMPLEX8 (COMPLEX8 *out, const COMPLEX8 *in1, const COMPLEX8 *in2, const UINT4 len) |
Compute \(\text{out} = \text{in1} + \text{in2}\) over COMPLEX8 vectors in1 and in2 with len elements. More... | |
Vector by Scalar Operations | |
int | XLALVectorShiftREAL4 (REAL4 *out, REAL4 scalar, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} + \text{in}\) over REAL4 vector in with len elements. More... | |
int | XLALVectorScaleREAL4 (REAL4 *out, REAL4 scalar, const REAL4 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} \times \text{in}\) over REAL4 vector in with len elements. More... | |
int | XLALVectorScaleREAL8 (REAL8 *out, REAL8 scalar, const REAL8 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} \times \text{in}\) over REAL8 vector in with len elements. More... | |
int | XLALVectorShiftREAL8 (REAL8 *out, REAL8 scalar, const REAL8 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} + \text{in}\) over REAL8 vector in with len elements. More... | |
int | XLALVectorScaleCOMPLEX8 (COMPLEX8 *out, COMPLEX8 scalar, const COMPLEX8 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} \times \text{in}\) over COMPLEX8 vector in with len elements. More... | |
int | XLALVectorShiftCOMPLEX8 (COMPLEX8 *out, COMPLEX8 scalar, const COMPLEX8 *in, const UINT4 len) |
Compute \(\text{out} = \text{scalar} + \text{in}\) over COMPLEX8 vector in with len elements. More... | |
Vector Element Finding Operations | |
int | XLALVectorFindVectorLessEqualREAL4 (UINT4 *count, UINT4 *out, const REAL4 *in1, const REAL4 *in2, const UINT4 len) |
Count and return indexes (in count and out respectively) of vector elements where \(\text{in1} \le \text{in2}\). More... | |
int | XLALVectorFindScalarLessEqualREAL4 (UINT4 *count, UINT4 *out, REAL4 scalar, const REAL4 *in, const UINT4 len) |
Count and return indexes (in count and out respectively) of vector elements where \(\text{scalar} \le \text{in2}\). More... | |
UINT4VectorAligned* XLALCreateUINT4VectorAligned | ( | const UINT4 | length, |
const UINT4 | align | ||
) |
Create a new UINT4VectorAligned
struct with length length
and alignment align
.
UINT4VectorAligned* XLALResizeUINT4VectorAligned | ( | UINT4VectorAligned * | in, |
const UINT4 | length, | ||
const UINT4 | align | ||
) |
Resize an existing UINT4VectorAligned
struct to length length
and alignment align
.
void XLALDestroyUINT4VectorAligned | ( | UINT4VectorAligned * | in | ) |
Free a UINT4VectorAligned
struct.
REAL4VectorAligned* XLALCreateREAL4VectorAligned | ( | const UINT4 | length, |
const UINT4 | align | ||
) |
Create a new REAL4VectorAligned
struct with length length
and alignment align
.
REAL4VectorAligned* XLALResizeREAL4VectorAligned | ( | REAL4VectorAligned * | in, |
const UINT4 | length, | ||
const UINT4 | align | ||
) |
Resize an existing REAL4VectorAligned
struct to length length
and alignment align
.
void XLALDestroyREAL4VectorAligned | ( | REAL4VectorAligned * | in | ) |
Free a REAL4VectorAligned
struct.
REAL8VectorAligned* XLALCreateREAL8VectorAligned | ( | const UINT4 | length, |
const UINT4 | align | ||
) |
Create a new REAL8VectorAligned
struct with length length
and alignment align
.
REAL8VectorAligned* XLALResizeREAL8VectorAligned | ( | REAL8VectorAligned * | in, |
const UINT4 | length, | ||
const UINT4 | align | ||
) |
Resize an existing REAL8VectorAligned
struct to length length
and alignment align
.
void XLALDestroyREAL8VectorAligned | ( | REAL8VectorAligned * | in | ) |
Free a REAL8VectorAligned
struct.
COMPLEX8VectorAligned* XLALCreateCOMPLEX8VectorAligned | ( | const UINT4 | length, |
const UINT4 | align | ||
) |
Create a new COMPLEX8VectorAligned
struct with length length
and alignment align
.
COMPLEX8VectorAligned* XLALResizeCOMPLEX8VectorAligned | ( | COMPLEX8VectorAligned * | in, |
const UINT4 | length, | ||
const UINT4 | align | ||
) |
Resize an existing COMPLEX8VectorAligned
struct to length length
and alignment align
.
void XLALDestroyCOMPLEX8VectorAligned | ( | COMPLEX8VectorAligned * | in | ) |
Free a COMPLEX8VectorAligned
struct.
COMPLEX16VectorAligned* XLALCreateCOMPLEX16VectorAligned | ( | const UINT4 | length, |
const UINT4 | align | ||
) |
Create a new COMPLEX16VectorAligned
struct with length length
and alignment align
.
COMPLEX16VectorAligned* XLALResizeCOMPLEX16VectorAligned | ( | COMPLEX16VectorAligned * | in, |
const UINT4 | length, | ||
const UINT4 | align | ||
) |
Resize an existing COMPLEX16VectorAligned
struct to length length
and alignment align
.
void XLALDestroyCOMPLEX16VectorAligned | ( | COMPLEX16VectorAligned * | in | ) |
Free a COMPLEX16VectorAligned
struct.
Cast (i.e.
truncate) REAL4 vector in
to INT4 vector out
, with len
elements.
Compute \(\text{out} = \sin(\text{in})\) over REAL4 vectors out
, in
with len
elements.
Compute \(\text{out} = \cos(\text{in})\) over REAL4 vectors out
, in
with len
elements.
Compute \(\text{out} = \exp(\text{in})\) over REAL4 vectors out
, in
with len
elements.
Compute \(\text{out} = \log(\text{in})\) over REAL4 vectors out
, in
with len
elements.
Compute \(\text{out} = round ( \text{in} )\) over REAL4 vectors out
, in
with len
elements.
Compute \(\text{out} = round ( \text{in} )\) over REAL8 vectors out
, in
with len
elements.
Compute \(\text{out1} = \sin(\text{in}), \text{out2} = \cos(\text{in})\) over REAL4 vectors out1
, out2
, in
with len
elements.
Compute \(\text{out1} = \sin(2\pi \text{in}), \text{out2} = \cos(2\pi \text{in})\) over REAL4 vectors out1
, out2
, in
with len
elements.
Compute \(\text{out} = \text{in1} + \text{in2}\) over REAL4 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{in1} - \text{in2}\) over REAL4 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{in1} \times \text{in2}\) over REAL4 vectors in1
and in2
with len
elements.
Compute \(\text{out} = max ( \text{in1}, \text{in2} )\) over REAL4 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{in1} + \text{in2}\) over REAL8 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{in1} - \text{in2}\) over REAL8 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{in1} \times \text{in2}\) over REAL8 vectors in1
and in2
with len
elements.
Compute \(\text{out} = max ( \text{in1}, \text{in2} )\) over REAL8 vectors in1
and in2
with len
elements.
int XLALVectorMultiplyCOMPLEX8 | ( | COMPLEX8 * | out, |
const COMPLEX8 * | in1, | ||
const COMPLEX8 * | in2, | ||
const UINT4 | len | ||
) |
Compute \(\text{out} = \text{in1} \times \text{in2}\) over COMPLEX8 vectors in1
and in2
with len
elements.
int XLALVectorAddCOMPLEX8 | ( | COMPLEX8 * | out, |
const COMPLEX8 * | in1, | ||
const COMPLEX8 * | in2, | ||
const UINT4 | len | ||
) |
Compute \(\text{out} = \text{in1} + \text{in2}\) over COMPLEX8 vectors in1
and in2
with len
elements.
Compute \(\text{out} = \text{scalar} + \text{in}\) over REAL4 vector in
with len
elements.
Compute \(\text{out} = \text{scalar} \times \text{in}\) over REAL4 vector in
with len
elements.
Compute \(\text{out} = \text{scalar} \times \text{in}\) over REAL8 vector in
with len
elements.
Compute \(\text{out} = \text{scalar} + \text{in}\) over REAL8 vector in
with len
elements.
int XLALVectorScaleCOMPLEX8 | ( | COMPLEX8 * | out, |
COMPLEX8 | scalar, | ||
const COMPLEX8 * | in, | ||
const UINT4 | len | ||
) |
Compute \(\text{out} = \text{scalar} \times \text{in}\) over COMPLEX8 vector in
with len
elements.
int XLALVectorShiftCOMPLEX8 | ( | COMPLEX8 * | out, |
COMPLEX8 | scalar, | ||
const COMPLEX8 * | in, | ||
const UINT4 | len | ||
) |
Compute \(\text{out} = \text{scalar} + \text{in}\) over COMPLEX8 vector in
with len
elements.
int XLALVectorFindVectorLessEqualREAL4 | ( | UINT4 * | count, |
UINT4 * | out, | ||
const REAL4 * | in1, | ||
const REAL4 * | in2, | ||
const UINT4 | len | ||
) |
Count and return indexes (in count
and out
respectively) of vector elements where \(\text{in1} \le \text{in2}\).