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 cuda. More...

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::cuda
 Holds all CUDA compute kernels used by ViennaCL.
 
 viennacl::linalg::cuda::detail
 Helper functions for the CUDA linear algebra backend.
 
 viennacl::linalg::cuda::detail::fft
 

Functions

vcl_size_t viennacl::linalg::cuda::detail::fft::num_bits (vcl_size_t size)
 
vcl_size_t viennacl::linalg::cuda::detail::fft::next_power_2 (vcl_size_t n)
 
__host__ __device__ float2 viennacl::linalg::cuda::operator+ (float2 a, float2 b)
 
__host__ __device__ float2 viennacl::linalg::cuda::operator- (float2 a, float2 b)
 
template<typename SCALARTYPE >
__device__ float2 viennacl::linalg::cuda::operator/ (float2 a, SCALARTYPE b)
 
__device__ float2 viennacl::linalg::cuda::operator* (float2 in1, float2 in2)
 
__host__ __device__ double2 viennacl::linalg::cuda::operator+ (double2 a, double2 b)
 
__host__ __device__ double2 viennacl::linalg::cuda::operator- (double2 a, double2 b)
 
template<typename SCALARTYPE >
__host__ __device__ double2 viennacl::linalg::cuda::operator/ (double2 a, SCALARTYPE b)
 
__host__ __device__ double2 viennacl::linalg::cuda::operator* (double2 in1, double2 in2)
 
__device__ unsigned int viennacl::linalg::cuda::get_reorder_num (unsigned int v, unsigned int bit_size)
 
template<typename Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::fft_direct (const Numeric2T *input, Numeric2T *output, unsigned int size, unsigned int stride, unsigned int batch_num, NumericT sign, bool is_row_major)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::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::cuda::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 >
__global__ void viennacl::linalg::cuda::fft_reorder (NumericT *input, unsigned int bit_size, unsigned int size, unsigned int stride, unsigned int batch_num, bool is_row_major)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::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 Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::fft_radix2_local (Numeric2T *input, unsigned int bit_size, unsigned int size, unsigned int stride, unsigned int batch_num, NumericT sign, bool is_row_major)
 
template<typename Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::fft_radix2 (Numeric2T *input, unsigned int s, unsigned int bit_size, unsigned int size, unsigned int stride, unsigned int batch_num, NumericT sign, bool is_row_major)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::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::cuda::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 Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::bluestein_post (Numeric2T *Z, Numeric2T *out, unsigned int size, NumericT sign)
 
template<typename Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::bluestein_pre (Numeric2T *input, Numeric2T *A, Numeric2T *B, unsigned int size, unsigned int ext_size, NumericT sign)
 
template<typename NumericT >
__global__ void viennacl::linalg::cuda::zero2 (NumericT *input1, NumericT *input2, unsigned int size)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::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 >
__global__ void viennacl::linalg::cuda::fft_mult_vec (const NumericT *input1, const NumericT *input2, NumericT *output, unsigned int size)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::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. More...
 
template<typename Numeric2T , typename NumericT >
__global__ void viennacl::linalg::cuda::fft_div_vec_scalar (Numeric2T *input1, unsigned int size, NumericT factor)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::normalize (viennacl::vector< NumericT, AlignmentV > &input)
 Normalize vector on with his own size. More...
 
template<typename NumericT >
__global__ void viennacl::linalg::cuda::transpose (const NumericT *input, NumericT *output, unsigned int row_num, unsigned int col_num)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::transpose (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > const &input, viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &output)
 Transpose matrix. More...
 
template<typename NumericT >
__global__ void viennacl::linalg::cuda::transpose_inplace (NumericT *input, unsigned int row_num, unsigned int col_num)
 
template<typename NumericT , unsigned int AlignmentV>
void viennacl::linalg::cuda::transpose (viennacl::matrix< NumericT, viennacl::row_major, AlignmentV > &input)
 Inplace_transpose matrix. More...
 
template<typename RealT , typename ComplexT >
__global__ void viennacl::linalg::cuda::real_to_complex (const RealT *in, ComplexT *out, unsigned int size)
 
template<typename NumericT >
void viennacl::linalg::cuda::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 ComplexT , typename RealT >
__global__ void viennacl::linalg::cuda::complex_to_real (const ComplexT *in, RealT *out, unsigned int size)
 
template<typename NumericT >
void viennacl::linalg::cuda::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 >
__global__ void viennacl::linalg::cuda::reverse_inplace (NumericT *vec, unsigned int size)
 
template<typename NumericT >
void viennacl::linalg::cuda::reverse (viennacl::vector_base< NumericT > &in)
 Reverse vector to oposite order and save it in input vector. More...
 

Variables

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

Detailed Description

Implementations of Fast Furier Transformation using cuda.

Definition in file fft_operations.hpp.