Implementations of Fast Furier Transformation using cuda. More...
#include <cmath>
#include <viennacl/matrix.hpp>
#include <viennacl/vector.hpp>
#include "viennacl/forwards.h"
#include "viennacl/scalar.hpp"
#include "viennacl/tools/tools.hpp"
#include "viennacl/linalg/cuda/common.hpp"
#include "viennacl/linalg/host_based/vector_operations.hpp"
#include "viennacl/linalg/host_based/fft_operations.hpp"
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 |
Implementations of Fast Furier Transformation using cuda.
Definition in file fft_operations.hpp.