25 #include "cheetah/cuda_utils/cuda_thrust.h" 58 T variance() {
return M2 / (n - 1); }
59 T variance_n() {
return M2 / n; }
72 result.mean = (float)x - 128.;
87 result.mean = (float)x ;
100 :
public thrust::binary_function<const summary_stats_data<T>&,
101 const summary_stats_data<T>&,
102 summary_stats_data<T> >
113 T delta = y.mean - x.mean;
115 T delta2 = delta * delta;
119 result.mean = x.mean + delta * y.n / n;
121 result.M2 = x.M2 + y.M2;
122 result.M2 += delta2 * x.n * y.n / n;
140 void statistics(
unsigned char *raw_in,
int N,
float *mean,
float *rms, cudaStream_t stream)
147 thrust::cuda::par.on(stream);
148 thrust::device_ptr<unsigned char> dev_in = thrust::device_pointer_cast(raw_in);
158 summary_stats_data<T> result = thrust::transform_reduce(dev_in, dev_in + N, unary_op, init, binary_op);
160 *rms = sqrt(result.variance_n());
177 void statistics_float(
float *raw_in,
int N,
float *mean,
float *rms, cudaStream_t stream)
184 thrust::cuda::par.on(stream);
185 thrust::device_ptr<T> dev_in = thrust::device_pointer_cast(raw_in);
195 summary_stats_data<T> result = thrust::transform_reduce(dev_in, dev_in + N, unary_op, init, binary_op);
197 *rms = sqrt(result.variance_n());
201 void find_max(
float *raw_in,
int start,
int N,
float &sn_max,
float &pulse_width,
int &index)
204 thrust::device_ptr<float> d_in = thrust::device_pointer_cast(raw_in);
207 thrust::device_ptr<float> max_sn_pos;
208 thrust::device_ptr<float> width_pos;
209 max_sn_pos = thrust::max_element(d_in + start, d_in + start + N);
211 index = max_sn_pos - (d_in + start);
212 sn_max = *max_sn_pos;
213 width_pos = d_in + start + index + N;
214 pulse_width = *width_pos;
Some limits and constants for FLDO.