JASPL  0.2
Just Another Signal Processing Library
scalarmultiply.tpp
1 
2 
3 template <typename T>
4 ScalarMultiply<T>::ScalarMultiply( typename T::value_type scalar_value ) {
5 
6  static_assert( is_stdlib_container< T >::value, "ScalarMultiply can only accept pointers or container-like objects." );
7  static_assert( std::is_arithmetic< typename T::value_type >::value, "ScalarMultiply must be made with arithmetic type" );
8 
9 // std::string source_directory = SOURCE_DIR;
10 // std::string kernel_name = "/scalarmultiply.cl";
11 
12 // kernel_path = source_directory + kernel_name;
13 
14 // LoadCLKernel<typename T::value_type>( "ScalarMultiply" );
15  std::string kernel_str = R"END(
16  __kernel void ScalarMultiply( __global TYPE* input, TYPE scalar )
17  {
18 
19  int i = get_global_id(0);
20 
21  input[i] *= scalar;
22 
23  }
24 
25  )END";
26 
27  std::string kernel_name = "ScalarMultiply";
28 
29  LoadCLKernel<typename T::value_type>( kernel_str, kernel_name );
30 
31  cl_int err;
32  err = kernel.setArg(1, scalar_value);
33  OCL_DEBUG( err );
34 }
35 
36 template <typename T>
37 ScalarMultiply<T>::~ScalarMultiply() {}
38 
39 template <typename T>
40 void ScalarMultiply<T>::Trigger() {
41 
42  cl_int err;
43  err = command_queue.enqueueNDRangeKernel( kernel,cl::NullRange, cl::NDRange( signal_size ) );
44  OCL_DEBUG( err );
45 }
46 
47 template <typename T>
48 void ScalarMultiply<T>::SetSignal( cl::Buffer& signal_buff, uint sig_size ){
49 
50  signal_size = sig_size;
51  err = kernel.setArg(0, signal_buff);
52 
53  OCL_DEBUG( err );
54 }
55 
56 template <typename T>
57 cl::Buffer& ScalarMultiply<T>::ProcessedSignal() {
58  //
59 }
60 
61 template <typename T>
62 size_t ScalarMultiply<T>::ProcessedSignalBytes() {
63  return signal_size*sizeof( typename T::value_type );
64 }
65 
66 template <typename T>
67 size_t ScalarMultiply<T>::ProcessedSignalSize(){
68  return signal_size;
69 }
70 
71 template <typename T>
72 bool ScalarMultiply<T>::NeedsToReknew() {
73  return false;
74 }