15 const std::vector<std::pair<dunedaq::trgdataformats::channel_t, int16_t>> channel_plane_numbers,
16 const int sample_tick_difference) {
20 for (
const auto& name_config : configs) {
21 if (name_config.second.contains(
"metric_collect_toggle_state") && name_config.second[
"metric_collect_toggle_state"] ==
true) {
32 new_pipe.
configure(configs, std::vector<std::pair<dunedaq::trgdataformats::channel_t, int16_t>>(begin_channel_plane, end_channel_plane));
40 for (
int i = start_index; i < total_pipelines && pipeline_id <
m_num_pipelines; ++i, ++pipeline_id) {
83 __m256i odd = _mm256_permutevar8x32_epi32(regi, _mm256_setr_epi32(1, 0, 1, 2, 3, 4, 5, 6));
86 __m256i even = _mm256_sllv_epi64(regi, _mm256_setr_epi64x(6, 14, 22, 30));
87 odd = _mm256_srlv_epi64(odd, _mm256_setr_epi64x(30, 22, 14, 6));
90 __m256i both = _mm256_blend_epi32(even, odd, 0b01010101);
91 __m256i right = _mm256_and_si256(_mm256_set1_epi32(0xFFFFu), both);
92 __m256i left = _mm256_and_si256(_mm256_set1_epi32(0x3FFF0000u), both);
94 right = _mm256_srli_epi32(right, 2);
95 return _mm256_or_si256(left, right);
103 __m256i idx = _mm256_set_epi32(6, 5, 4, 3, 3, 2, 1, 0);
104 __m256i shuf1 = _mm256_permutevar8x32_epi32(regi, idx);
107 __m256i count = _mm256_set_epi32(12, 8, 4, 0, 14, 10, 6, 2);
108 __m256i high_half = _mm256_sllv_epi32(shuf1, count);
109 high_half = _mm256_and_si256(high_half, _mm256_set1_epi32(0x3FFF0000u));
112 count = _mm256_set_epi32(10, 6, 2, 0, 12, 8, 4, 0);
113 __m256i shift2 = _mm256_sllv_epi32(shuf1, count);
116 idx = _mm256_set_epi32(5, 4, 3, 2, 2, 1, 0, 0);
117 __m256i shuf2 = _mm256_permutevar8x32_epi32(regi, idx);
120 count = _mm256_set_epi32(22, 26, 30, 0, 20, 24, 28, 0);
121 __m256i shift3 = _mm256_srlv_epi32(shuf2, count);
124 __m256i low_half = _mm256_or_si256(shift2, shift3);
125 low_half = _mm256_and_si256(low_half, _mm256_set1_epi32(0x3FFFu));
128 __m256i both = _mm256_or_si256(low_half, high_half);
129 both = _mm256_andnot_si256(_mm256_set_epi32(0, 0, 0, 0xFFFFu, 0, 0, 0, 0), both);
133 __m256i shift4 = _mm256_srli_epi32(regi, 18);
135 shift4 = _mm256_and_si256(_mm256_set_epi32(0, 0x3FFFu, 0, 0, 0, 0, 0, 0), shift4);
138 idx = _mm256_set_epi32(0, 0, 0, 6, 0, 0, 0, 0);
139 __m256i shuf3 = _mm256_permutevar8x32_epi32(shift4, idx);
142 both = _mm256_or_si256(both, shuf3);
void configure(const std::vector< std::pair< std::string, nlohmann::json > > &configs, const std::vector< std::pair< dunedaq::trgdataformats::channel_t, int16_t > > channel_plane_numbers, const int sample_tick_difference)
Setup and configure the AVX pipelines.