ViennaCL - The Vienna Computing Library  1.7.0
Free open-source GPU-accelerated linear algebra and solver library.
fft_operations.hpp File Reference

Implementations of Fast Furier Transformation using a plain single-threaded or OpenMP-enabled execution on CPU. More...

#include <viennacl/vector.hpp>
#include <viennacl/matrix.hpp>
#include "viennacl/linalg/host_based/vector_operations.hpp"
#include <stdexcept>
#include <cmath>
#include <complex>

Go to the source code of this file.

Namespaces

 viennacl
 Main namespace in ViennaCL. Holds all the basic types such as vector, matrix, etc. and defines operations upon them.
 
 viennacl::linalg
 Provides all linear algebra operations which are not covered by operator overloads.
 
 viennacl::linalg::host_based
 Holds all compute kernels with conventional host-based execution (buffers in CPU RAM).
 
 viennacl::linalg::host_based::detail
 Helper functions for the host-based linear algebra backend.
 
 viennacl::linalg::host_based::detail::fft
 
 viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER
 

Enumerations

enum  viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER { viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::COL_MAJOR }
 

Functions

vcl_size_t viennacl::linalg::host_based::detail::fft::num_bits (vcl_size_t size)
 
vcl_size_t viennacl::linalg::host_based::detail::fft::next_power_2 (vcl_size_t n)
 
vcl_size_t viennacl::linalg::host_based::detail::fft::get_reorder_num (vcl_size_t v, vcl_size_t bit_size)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::detail::fft::copy_to_complex_array (std::complex< NumericT > *input_complex, viennacl::vector< NumericT, AlignmentV > const &in, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::detail::fft::copy_to_complex_array (std::complex< NumericT > *input_complex, viennacl::vector_base< NumericT > const &in, vcl_size_t size)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::detail::fft::copy_to_vector (std::complex< NumericT > *input_complex, viennacl::vector< NumericT, AlignmentV > &in, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::detail::fft::copy_to_complex_array (std::complex< NumericT > *input_complex, NumericT const *in, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::detail::fft::copy_to_vector (std::complex< NumericT > *input_complex, NumericT *in, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::detail::fft::copy_to_vector (std::complex< NumericT > *input_complex, viennacl::vector_base< NumericT > &in, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::detail::fft::zero2 (NumericT *input1, NumericT *input2, vcl_size_t size)
 
template<typename NumericT >
void viennacl::linalg::host_based::fft_direct (std::complex< NumericT > *input_complex, std::complex< NumericT > *output, vcl_size_t size, vcl_size_t stride, vcl_size_t batch_num, NumericT sign, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Direct algoritm kenrnel. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::direct (viennacl::vector< NumericT, AlignmentV > const &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t size, vcl_size_t stride, vcl_size_t batch_num, NumericT sign=NumericT(-1), viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Direct 1D algorithm for computing Fourier transformation. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::direct (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > const &in, viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &out, vcl_size_t size, vcl_size_t stride, vcl_size_t batch_num, NumericT sign=NumericT(-1), viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Direct 2D algorithm for computing Fourier transformation. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::reorder (viennacl::vector< NumericT, AlignmentV > &in, vcl_size_t size, vcl_size_t stride, vcl_size_t bits_datasize, vcl_size_t batch_num, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::reorder (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &in, vcl_size_t size, vcl_size_t stride, vcl_size_t bits_datasize, vcl_size_t batch_num, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 
template<typename NumericT >
void viennacl::linalg::host_based::fft_radix2 (std::complex< NumericT > *input_complex, vcl_size_t batch_num, vcl_size_t bit_size, vcl_size_t size, vcl_size_t stride, NumericT sign, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Radix-2 algorithm for computing Fourier transformation. Kernel for computing smaller amount of data. More...
 
template<typename NumericT >
void viennacl::linalg::host_based::fft_radix2_local (std::complex< NumericT > *input_complex, std::complex< NumericT > *lcl_input, vcl_size_t batch_num, vcl_size_t bit_size, vcl_size_t size, vcl_size_t stride, NumericT sign, viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Radix-2 algorithm for computing Fourier transformation. Kernel for computing bigger amount of data. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::radix2 (viennacl::vector< NumericT, AlignmentV > &in, vcl_size_t size, vcl_size_t stride, vcl_size_t batch_num, NumericT sign=NumericT(-1), viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Radix-2 1D algorithm for computing Fourier transformation. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::radix2 (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &in, vcl_size_t size, vcl_size_t stride, vcl_size_t batch_num, NumericT sign=NumericT(-1), viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::DATA_ORDER data_order=viennacl::linalg::host_based::detail::fft::FFT_DATA_ORDER::ROW_MAJOR)
 Radix-2 2D algorithm for computing Fourier transformation. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::bluestein (viennacl::vector< NumericT, AlignmentV > &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t)
 Bluestein's algorithm for computing Fourier transformation. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::normalize (viennacl::vector< NumericT, AlignmentV > &input)
 Normalize vector with his own size. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::multiply_complex (viennacl::vector< NumericT, AlignmentV > const &input1, viennacl::vector< NumericT, AlignmentV > const &input2, viennacl::vector< NumericT, AlignmentV > &output)
 Complex multiplikation of two vectors. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::transpose (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &input)
 Inplace transpose of matrix. More...
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::host_based::transpose (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > const &input, viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &output)
 Transpose matrix. More...
 
template<typename NumericT >
void viennacl::linalg::host_based::real_to_complex (viennacl::vector_base< NumericT > const &in, viennacl::vector_base< NumericT > &out, vcl_size_t size)
 Create complex vector from real vector (even elements(2*k) = real part, odd elements(2*k+1) = imaginary part) More...
 
template<typename NumericT >
void viennacl::linalg::host_based::complex_to_real (viennacl::vector_base< NumericT > const &in, viennacl::vector_base< NumericT > &out, vcl_size_t size)
 Create real vector from complex vector (even elements(2*k) = real part, odd elements(2*k+1) = imaginary part) More...
 
template<typename NumericT >
void viennacl::linalg::host_based::reverse (viennacl::vector_base< NumericT > &in)
 Reverse vector to opposite order and save it in input vector. More...
 

Variables

const vcl_size_t viennacl::linalg::host_based::detail::fft::MAX_LOCAL_POINTS_NUM = 512
 

Detailed Description

Implementations of Fast Furier Transformation using a plain single-threaded or OpenMP-enabled execution on CPU.

Definition in file fft_operations.hpp.