ViennaCL - The Vienna Computing Library  1.2.0
fft_kernels.h
Go to the documentation of this file.
1 #ifndef _VIENNACL_FFT_KERNELS_HPP_
2 #define _VIENNACL_FFT_KERNELS_HPP_
6 #include "viennacl/ocl/utils.hpp"
8 
9 //Automatically generated file from aux-directory, do not edit manually!
10 namespace viennacl
11 {
12  namespace linalg
13  {
14  namespace kernels
15  {
16  template<class TYPE, unsigned int alignment>
17  struct fft;
18 
19 
21  template <>
22  struct fft<float, 1>
23  {
24  static std::string program_name()
25  {
26  return "f_fft_1";
27  }
28  static void init()
29  {
31  static std::map<cl_context, bool> init_done;
33  if (!init_done[context_.handle()])
34  {
35  std::string source;
36  source.append(fft_align1_transpose);
37  source.append(fft_align1_fft_div_vec_scalar);
38  source.append(fft_align1_transpose_inplace);
39  source.append(fft_align1_zero2);
40  source.append(fft_align1_real_to_complex);
41  source.append(fft_align1_complex_to_real);
42  source.append(fft_align1_reverse_inplace);
43  source.append(fft_align1_bluestein_pre);
44  source.append(fft_align1_fft_mult_vec);
45  source.append(fft_align1_bluestein_post);
46  source.append(fft_align1_vandermonde_prod);
47  std::string prog_name = program_name();
48  #ifdef VIENNACL_BUILD_INFO
49  std::cout << "Creating program " << prog_name << std::endl;
50  #endif
51  context_.add_program(source, prog_name);
52  viennacl::ocl::program & prog_ = context_.get_program(prog_name);
53  prog_.add_kernel("transpose");
54  prog_.add_kernel("fft_div_vec_scalar");
55  prog_.add_kernel("transpose_inplace");
56  prog_.add_kernel("zero2");
57  prog_.add_kernel("real_to_complex");
58  prog_.add_kernel("complex_to_real");
59  prog_.add_kernel("reverse_inplace");
60  prog_.add_kernel("bluestein_pre");
61  prog_.add_kernel("fft_mult_vec");
62  prog_.add_kernel("bluestein_post");
63  prog_.add_kernel("vandermonde_prod");
64  init_done[context_.handle()] = true;
65  } //if
66  } //init
67  }; // struct
68 
69 
70 
72  template <>
73  struct fft<double, 1>
74  {
75  static std::string program_name()
76  {
77  return "d_fft_1";
78  }
79  static void init()
80  {
82  static std::map<cl_context, bool> init_done;
84  if (!init_done[context_.handle()])
85  {
86  std::string source;
91  source.append(viennacl::tools::make_double_kernel(fft_align1_zero2, fp64_ext));
99  std::string prog_name = program_name();
100  #ifdef VIENNACL_BUILD_INFO
101  std::cout << "Creating program " << prog_name << std::endl;
102  #endif
103  context_.add_program(source, prog_name);
104  viennacl::ocl::program & prog_ = context_.get_program(prog_name);
105  prog_.add_kernel("transpose");
106  prog_.add_kernel("fft_div_vec_scalar");
107  prog_.add_kernel("transpose_inplace");
108  prog_.add_kernel("zero2");
109  prog_.add_kernel("real_to_complex");
110  prog_.add_kernel("complex_to_real");
111  prog_.add_kernel("reverse_inplace");
112  prog_.add_kernel("bluestein_pre");
113  prog_.add_kernel("fft_mult_vec");
114  prog_.add_kernel("bluestein_post");
115  prog_.add_kernel("vandermonde_prod");
116  init_done[context_.handle()] = true;
117  } //if
118  } //init
119  }; // struct
120 
121 
122  } //namespace kernels
123  } //namespace linalg
124 } //namespace viennacl
125 #endif