Highly Efficient FFT for Exascale: HeFFTe v2.3
heffte::stock::Complex< F, L > Class Template Reference

Custom complex type taking advantage of vectorization A Complex Type intrinsic to HeFFTe that takes advantage of vectorization. It is currently compatible with AVX2 to create 1 double-precision complex, 2 double-precision complex, 2 single-precision complex, or 4 single-precision complex numbers. More...

#include <heffte_stock_complex.h>

Public Member Functions

 Complex (F *const f)
 Load from an array of primitives.
 
 Complex (std::initializer_list< F > il)
 Load from an initializer list of primitives.
 
 Complex (typename pack< F, L >::type v)
 Load from an existing vector pack.
 
 Complex (F x, F y)
 Load from real and imaginary parts (repeating for all numbers in pack)
 
 Complex (std::complex< F > const *c)
 Load from pointer to existing std::complex numbers.
 
 Complex (std::complex< F > const *c, int stride)
 Load from strided pointer to existing std::complex numbers.
 
 Complex (std::initializer_list< std::complex< F >> il)
 Load from initializer list of existing std::complex numbers.
 
 Complex ()
 Default constructor of zeros.
 
Complex< F, L > operator+ (Complex< F, L > const &o)
 Add with another pack of complex number.
 
Complex< F, L > operator- (Complex< F, L > const &o)
 Subtract another pack of complex number.
 
Complex< F, L > operator* (Complex< F, L > const &o)
 Multiply by another pack of complex number.
 
Complex< F, L > operator/ (Complex< F, L > const &o)
 Divide by another pack of complex number.
 
Complex< F, L > operator+= (Complex< F, L > const &o)
 Add with and assign another complex number.
 
Complex< F, L > operator-= (Complex< F, L > const &o)
 Subtract and assign another complex number from this.
 
Complex< F, L > operator*= (Complex< F, L > const &o)
 Multiply by and assign another complex number.
 
Complex< F, L > operator/= (Complex< F, L > const &o)
 Divide by and assign another complex number.
 
Complex< F, L > operator+ (F o)
 Add with a floating point number.
 
Complex< F, L > operator- (F o)
 Subtract a floating point number.
 
Complex< F, L > operator* (F o)
 Multiply by a floating point number.
 
Complex< F, L > operator/ (F o)
 Divide by a floating point number.
 
Complex< F, L > operator+= (F o)
 Add with and assign a floating point number.
 
Complex< F, L > operator-= (F o)
 Subtract and assign a floating point number.
 
Complex< F, L > operator*= (F o)
 Multiply by and assign a floating point number.
 
Complex< F, L > operator/= (F o)
 
Complex< F, L > fmadd (Complex< F, L > const &y, Complex< F, L > const &z)
 Fused multiply add.
 
Complex< F, L > fmsub (Complex< F, L > const &y, Complex< F, L > const &z)
 Fused multiply add.
 
Complex< F, L > operator- ()
 Negate the complex number.
 
void modulus (F *dest)
 Store the modulus of the complex number in an array of size L/2.
 
pack< F, L >::type modulus ()
 Return the modulus of the complex number in a vector pack.
 
Complex< F, L > conjugate ()
 Conjugate the current complex number.
 
Complex< F, L > __mul_i ()
 Multiply the complex number by i.
 
Complex< F, L > __mul_neg_i ()
 Multiply the complex number by i.
 
void get (F *dest)
 Store the Complex number in an array of length L.
 
std::complex< F > operator[] (std::size_t idx)
 Access the ith Complex number as a std::complex.
 
pack< F, L >::type get () const
 Return a vector pack representation of this number.
 

Detailed Description

template<typename F, int L>
class heffte::stock::Complex< F, L >

Custom complex type taking advantage of vectorization A Complex Type intrinsic to HeFFTe that takes advantage of vectorization. It is currently compatible with AVX2 to create 1 double-precision complex, 2 double-precision complex, 2 single-precision complex, or 4 single-precision complex numbers.


The documentation for this class was generated from the following file: