1 #ifndef VIENNACL_LINALG_FFT_OPERATIONS_HPP_ 
    2 #define VIENNACL_LINALG_FFT_OPERATIONS_HPP_ 
   30 #ifdef VIENNACL_WITH_OPENCL 
   35 #ifdef VIENNACL_WITH_CUDA 
   50 template<
typename NumericT, 
unsigned int AlignmentV>
 
   62 #ifdef VIENNACL_WITH_OPENCL 
   68 #ifdef VIENNACL_WITH_CUDA 
   88 template<
typename NumericT, 
unsigned int AlignmentV>
 
  100 #ifdef VIENNACL_WITH_OPENCL 
  106 #ifdef VIENNACL_WITH_CUDA 
  124 template<
typename NumericT, 
unsigned int AlignmentV>
 
  134 #ifdef VIENNACL_WITH_OPENCL 
  136     viennacl::linalg::opencl::reorder<NumericT>(viennacl::traits::opencl_handle(in), 
size, 
stride, bits_datasize, batch_num, data_order);
 
  140 #ifdef VIENNACL_WITH_CUDA 
  161 template<
typename NumericT, 
unsigned int AlignmentV>
 
  171 #ifdef VIENNACL_WITH_OPENCL 
  177 #ifdef VIENNACL_WITH_CUDA 
  197 template<
typename NumericT, 
unsigned int AlignmentV>
 
  208 #ifdef VIENNACL_WITH_OPENCL 
  214 #ifdef VIENNACL_WITH_CUDA 
  234 template<
typename NumericT, 
unsigned int AlignmentV>
 
  244 #ifdef VIENNACL_WITH_OPENCL 
  250 #ifdef VIENNACL_WITH_CUDA 
  266 template<
typename NumericT, 
unsigned int AlignmentV>
 
  276 #ifdef VIENNACL_WITH_OPENCL 
  282 #ifdef VIENNACL_WITH_CUDA 
  298 template<
typename NumericT, 
unsigned int AlignmentV>
 
  306 #ifdef VIENNACL_WITH_OPENCL 
  312 #ifdef VIENNACL_WITH_CUDA 
  328 template<
typename NumericT, 
unsigned int AlignmentV>
 
  336 #ifdef VIENNACL_WITH_OPENCL 
  342 #ifdef VIENNACL_WITH_CUDA 
  358 template<
typename NumericT, 
unsigned int AlignmentV>
 
  367 #ifdef VIENNACL_WITH_OPENCL 
  373 #ifdef VIENNACL_WITH_CUDA 
  389 template<
typename NumericT>
 
  398 #ifdef VIENNACL_WITH_OPENCL 
  404 #ifdef VIENNACL_WITH_CUDA 
  420 template<
typename NumericT>
 
  429 #ifdef VIENNACL_WITH_OPENCL 
  435 #ifdef VIENNACL_WITH_CUDA 
  451 template<
typename NumericT>
 
  459 #ifdef VIENNACL_WITH_OPENCL 
  465 #ifdef VIENNACL_WITH_CUDA 
OpenCL kernel file for FFT operations. 
Implementations of Fast Furier Transformation using OpenCL. 
Exception class in case of memory errors. 
void 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) = imagina...
Implementation of the dense matrix class. 
__global__ void real_to_complex(const RealT *in, ComplexT *out, unsigned int size)
void 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)
void 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) = imagina...
void 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) = imagina...
void reverse(viennacl::vector_base< NumericT > &in)
Reverse vector to oposite order and save it in input vector. 
void reverse(viennacl::vector_base< NumericT > &in)
Reverse vector to opposite order and save it in input vector. 
void 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. 
result_of::size_type< viennacl::vector_base< T > >::type stride(viennacl::vector_base< T > const &s)
void transpose(viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &input)
Inplace_transpose matrix. 
void bluestein(viennacl::vector< NumericT, AlignmentV > &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t)
Bluestein's algorithm for computing Fourier transformation. 
void normalize(viennacl::vector< NumericT, AlignmentV > &input)
Normalize vector on with his own size. 
__global__ void transpose(const NumericT *input, NumericT *output, unsigned int row_num, unsigned int col_num)
vcl_size_t size(VectorType const &vec)
Generic routine for obtaining the size of a vector (ViennaCL, uBLAS, etc.) 
void 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. 
void 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) = imagina...
void bluestein(viennacl::vector< NumericT, AlignmentV > &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t)
Bluestein's algorithm for computing Fourier transformation. 
void multiply_complex(viennacl::vector< NumericT, AlignmentV > const &input1, viennacl::vector< NumericT, AlignmentV > const &input2, viennacl::vector< NumericT, AlignmentV > &output)
Complex multiplikation of two vectors. 
void radix2(viennacl::ocl::handle< cl_mem > const &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 algorithm for computing Fourier transformation. 
void multiply_complex(viennacl::vector< NumericT, AlignmentV > const &input1, viennacl::vector< NumericT, AlignmentV > const &input2, viennacl::vector< NumericT, AlignmentV > &output)
Mutiply two complex vectors and store result in output. 
void reverse(viennacl::vector_base< NumericT > &in)
Reverse vector to oposite order and save it in input vector. 
void 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) = imagina...
void bluestein(viennacl::vector< NumericT, AlignmentV > &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t)
Bluestein's algorithm for computing Fourier transformation. 
void 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. 
void normalize(viennacl::vector< NumericT, AlignmentV > &input)
Normalize vector on with his own size. 
void 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 1D algorithm for computing Fourier transformation. 
void transpose(viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &input)
Inplace transpose of matrix. 
void transpose(viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &input)
Inplace_transpose matrix. 
The vector type with operator-overloads and proxy classes is defined here. Linear algebra operations ...
void multiply_complex(viennacl::vector< NumericT, AlignmentV > const &input1, viennacl::vector< NumericT, AlignmentV > const &input2, viennacl::vector< NumericT, AlignmentV > &output)
Mutiply two complex vectors and store result in output. 
Implementations of Fast Furier Transformation using cuda. 
void direct(viennacl::ocl::handle< cl_mem > const &in, viennacl::ocl::handle< cl_mem > const &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 algorithm for computing Fourier transformation. 
Implementations of Fast Furier Transformation using a plain single-threaded or OpenMP-enabled executi...
void reverse(viennacl::vector_base< NumericT > &in)
Reverse vector to oposite order and save it in input vector. 
void normalize(viennacl::vector< NumericT, AlignmentV > &input)
Normalize vector with his own size. 
void multiply_complex(viennacl::vector< NumericT, AlignmentV > const &input1, viennacl::vector< NumericT, AlignmentV > const &input2, viennacl::vector< NumericT, AlignmentV > &output)
Mutiply two complex vectors and store result in output. 
__global__ void complex_to_real(const ComplexT *in, RealT *out, unsigned int size)
viennacl::backend::mem_handle & handle(T &obj)
Returns the generic memory handle of an object. Non-const version. 
void 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)
void 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. 
void 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) = imagina...
void 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. 
void 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)
void normalize(viennacl::vector< NumericT, AlignmentV > &input)
Normalize vector on with his own size. 
void bluestein(viennacl::vector< NumericT, AlignmentV > &in, viennacl::vector< NumericT, AlignmentV > &out, vcl_size_t)
Bluestein's algorithm for computing Fourier transformation. 
SCALARTYPE sign(SCALARTYPE val)