DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
AVXRunSumProcessor.cpp
Go to the documentation of this file.
1
10
11namespace tpglibs {
12
13REGISTER_AVXPROCESSOR_CREATOR("AVXRunSumProcessor", AVXRunSumProcessor)
14
15void AVXRunSumProcessor::configure(const nlohmann::json& config, const int16_t* plane_numbers) {
16 int16_t memory_factors[16];
17 int16_t config_memory[3] = {config["memory_factor_plane0"],
18 config["memory_factor_plane1"],
19 config["memory_factor_plane2"]};
20 int16_t scale_factors[16];
21 int16_t config_scale[3] = {config["scale_factor_plane0"],
22 config["scale_factor_plane1"],
23 config["scale_factor_plane2"]};
24
25 for (int i = 0; i < 16; i++) {
26 memory_factors[i] = config_memory[plane_numbers[i]];
27 scale_factors[i] = config_scale[plane_numbers[i]];
28 }
29
30 m_memory_factor = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(memory_factors));
31 m_scale_factor = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(scale_factors));
32}
33
34__m256i AVXRunSumProcessor::process(const __m256i& signal) {
35 __m256i scaled_rs = _mm256_div_epi16(m_running_sum, 10);
36 scaled_rs = _mm256_mullo_epi16(scaled_rs, m_memory_factor);
37
38 __m256i scaled_signal = _mm256_div_epi16(signal, 10);
39 scaled_signal = _mm256_mullo_epi16(scaled_signal, m_scale_factor);
40
41 m_running_sum = _mm256_adds_epi16(scaled_rs, scaled_signal);
43}
44
45} // namespace tpglibs
#define REGISTER_AVXPROCESSOR_CREATOR(processor_name, processor_class)
Factory registration macro.
virtual __m256i process(const __m256i &signal) override
Simple signal pass-through on __m256i type.
AVX signal processor: Calculates the running sum of the signal.
__m256i process(const __m256i &signal) override
Calculate and store the running sum.
__m256i m_memory_factor
The R factor in the model equation.
__m256i m_running_sum
The RS in the model equation.
__m256i m_scale_factor
The S factor in the model equation.
__m256i _mm256_div_epi16(const __m256i &va, const int16_t &b)
Hack-ish AVX division function.
Definition AVXUtils.hpp:29