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