KleidiCV Coverage Report


Directory: ./
File: kleidicv/src/filters/median_blur_sorting_network_5x5.h
Date: 2025-09-25 14:13:34
Exec Total Coverage
Lines: 109 109 100.0%
Functions: 28 28 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 #ifndef KLEIDICV_MEDIAN_BLUR_SORTING_NETWORK_5X5_H
6 #define KLEIDICV_MEDIAN_BLUR_SORTING_NETWORK_5X5_H
7
8 #include <algorithm>
9
10 #include "kleidicv/kleidicv.h"
11 #include "kleidicv/traits.h"
12
13 namespace KLEIDICV_TARGET_NAMESPACE {
14 // R. B. Kent and M. S. Pattichis, ''Design of high-speed multiway merge
15 // sorting networks using fast single-stage N-sorters and N-filters,'' *IEEE
16 // Access*, vol. 10, pp. 79565–79581, Jul. 2022,
17 // doi: 10.1109/ACCESS.2022.3193370. The paper is currently available at:
18 // https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9837930
19 template <class Comparator, typename KernelWindowFunctor, typename T,
20 typename ContextType>
21 119270 void sorting_network5x5(KernelWindowFunctor& KernelWindow, T& output_vec,
22 ContextType& context) KLEIDICV_STREAMING {
23 119270 Comparator::compare_and_swap(KernelWindow(3, 0), KernelWindow(0, 0), context);
24 119270 Comparator::compare_and_swap(KernelWindow(4, 0), KernelWindow(1, 0), context);
25 119270 Comparator::compare_and_swap(KernelWindow(2, 0), KernelWindow(0, 0), context);
26 119270 Comparator::compare_and_swap(KernelWindow(3, 0), KernelWindow(1, 0), context);
27 119270 Comparator::compare_and_swap(KernelWindow(1, 0), KernelWindow(0, 0), context);
28 119270 Comparator::compare_and_swap(KernelWindow(4, 0), KernelWindow(2, 0), context);
29 119270 Comparator::compare_and_swap(KernelWindow(2, 0), KernelWindow(1, 0), context);
30 119270 Comparator::compare_and_swap(KernelWindow(4, 0), KernelWindow(3, 0), context);
31 119270 Comparator::compare_and_swap(KernelWindow(3, 0), KernelWindow(2, 0), context);
32 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(0, 1), context);
33 119270 Comparator::compare_and_swap(KernelWindow(4, 1), KernelWindow(1, 1), context);
34 119270 Comparator::compare_and_swap(KernelWindow(2, 1), KernelWindow(0, 1), context);
35 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(1, 1), context);
36 119270 Comparator::compare_and_swap(KernelWindow(1, 1), KernelWindow(0, 1), context);
37 119270 Comparator::compare_and_swap(KernelWindow(4, 1), KernelWindow(2, 1), context);
38 119270 Comparator::compare_and_swap(KernelWindow(2, 1), KernelWindow(1, 1), context);
39 119270 Comparator::compare_and_swap(KernelWindow(4, 1), KernelWindow(3, 1), context);
40 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(2, 1), context);
41 119270 Comparator::compare_and_swap(KernelWindow(3, 2), KernelWindow(0, 2), context);
42 119270 Comparator::compare_and_swap(KernelWindow(4, 2), KernelWindow(1, 2), context);
43 119270 Comparator::compare_and_swap(KernelWindow(2, 2), KernelWindow(0, 2), context);
44 119270 Comparator::compare_and_swap(KernelWindow(3, 2), KernelWindow(1, 2), context);
45 119270 Comparator::compare_and_swap(KernelWindow(1, 2), KernelWindow(0, 2), context);
46 119270 Comparator::compare_and_swap(KernelWindow(4, 2), KernelWindow(2, 2), context);
47 119270 Comparator::compare_and_swap(KernelWindow(2, 2), KernelWindow(1, 2), context);
48 119270 Comparator::compare_and_swap(KernelWindow(4, 2), KernelWindow(3, 2), context);
49 119270 Comparator::compare_and_swap(KernelWindow(3, 2), KernelWindow(2, 2), context);
50 119270 Comparator::compare_and_swap(KernelWindow(3, 3), KernelWindow(0, 3), context);
51 119270 Comparator::compare_and_swap(KernelWindow(4, 3), KernelWindow(1, 3), context);
52 119270 Comparator::compare_and_swap(KernelWindow(2, 3), KernelWindow(0, 3), context);
53 119270 Comparator::compare_and_swap(KernelWindow(3, 3), KernelWindow(1, 3), context);
54 119270 Comparator::compare_and_swap(KernelWindow(1, 3), KernelWindow(0, 3), context);
55 119270 Comparator::compare_and_swap(KernelWindow(4, 3), KernelWindow(2, 3), context);
56 119270 Comparator::compare_and_swap(KernelWindow(2, 3), KernelWindow(1, 3), context);
57 119270 Comparator::compare_and_swap(KernelWindow(4, 3), KernelWindow(3, 3), context);
58 119270 Comparator::compare_and_swap(KernelWindow(3, 3), KernelWindow(2, 3), context);
59 119270 Comparator::compare_and_swap(KernelWindow(3, 4), KernelWindow(0, 4), context);
60 119270 Comparator::compare_and_swap(KernelWindow(4, 4), KernelWindow(1, 4), context);
61 119270 Comparator::compare_and_swap(KernelWindow(2, 4), KernelWindow(0, 4), context);
62 119270 Comparator::compare_and_swap(KernelWindow(3, 4), KernelWindow(1, 4), context);
63 119270 Comparator::compare_and_swap(KernelWindow(1, 4), KernelWindow(0, 4), context);
64 119270 Comparator::compare_and_swap(KernelWindow(4, 4), KernelWindow(2, 4), context);
65 119270 Comparator::compare_and_swap(KernelWindow(2, 4), KernelWindow(1, 4), context);
66 119270 Comparator::compare_and_swap(KernelWindow(4, 4), KernelWindow(3, 4), context);
67 119270 Comparator::compare_and_swap(KernelWindow(3, 4), KernelWindow(2, 4), context);
68 // sort row zero for only element 3 and 4
69 119270 Comparator::compare_and_swap(KernelWindow(0, 3), KernelWindow(0, 0), context);
70 119270 Comparator::compare_and_swap(KernelWindow(0, 4), KernelWindow(0, 1), context);
71 119270 Comparator::compare_and_swap(KernelWindow(0, 2), KernelWindow(0, 0), context);
72 119270 Comparator::compare_and_swap(KernelWindow(0, 3), KernelWindow(0, 1), context);
73 119270 Comparator::min(KernelWindow(0, 1), KernelWindow(0, 0), context);
74 119270 Comparator::compare_and_swap(KernelWindow(0, 4), KernelWindow(0, 2), context);
75 119270 Comparator::min(KernelWindow(0, 2), KernelWindow(0, 1), context);
76 119270 Comparator::compare_and_swap(KernelWindow(0, 4), KernelWindow(0, 3), context);
77 119270 Comparator::min(KernelWindow(0, 3), KernelWindow(0, 2), context);
78 // sort row 1 for only element {2, 3, 4}
79 119270 Comparator::compare_and_swap(KernelWindow(1, 3), KernelWindow(1, 0), context);
80 119270 Comparator::compare_and_swap(KernelWindow(1, 4), KernelWindow(1, 1), context);
81 119270 Comparator::compare_and_swap(KernelWindow(1, 2), KernelWindow(1, 0), context);
82 119270 Comparator::compare_and_swap(KernelWindow(1, 3), KernelWindow(1, 1), context);
83 119270 Comparator::min(KernelWindow(1, 1), KernelWindow(1, 0), context);
84 119270 Comparator::compare_and_swap(KernelWindow(1, 4), KernelWindow(1, 2), context);
85 119270 Comparator::min(KernelWindow(1, 2), KernelWindow(1, 1), context);
86 119270 Comparator::compare_and_swap(KernelWindow(1, 4), KernelWindow(1, 3), context);
87 119270 Comparator::compare_and_swap(KernelWindow(1, 3), KernelWindow(1, 2), context);
88 // sort row 2 {1, 2, 3}
89 119270 Comparator::compare_and_swap(KernelWindow(2, 3), KernelWindow(2, 0), context);
90 119270 Comparator::compare_and_swap(KernelWindow(2, 4), KernelWindow(2, 1), context);
91 119270 Comparator::compare_and_swap(KernelWindow(2, 2), KernelWindow(2, 0), context);
92 119270 Comparator::compare_and_swap(KernelWindow(2, 3), KernelWindow(2, 1), context);
93 119270 Comparator::min(KernelWindow(2, 1), KernelWindow(2, 0), context);
94 119270 Comparator::compare_and_swap(KernelWindow(2, 4), KernelWindow(2, 2), context);
95 119270 Comparator::compare_and_swap(KernelWindow(2, 2), KernelWindow(2, 1), context);
96 119270 Comparator::max(KernelWindow(2, 4), KernelWindow(2, 3), context);
97 119270 Comparator::compare_and_swap(KernelWindow(2, 3), KernelWindow(2, 2), context);
98 // sort row 3
99 119270 Comparator::compare_and_swap(KernelWindow(3, 3), KernelWindow(3, 0), context);
100 119270 Comparator::compare_and_swap(KernelWindow(3, 4), KernelWindow(3, 1), context);
101 119270 Comparator::compare_and_swap(KernelWindow(3, 2), KernelWindow(3, 0), context);
102 119270 Comparator::compare_and_swap(KernelWindow(3, 3), KernelWindow(3, 1), context);
103 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(3, 0), context);
104 119270 Comparator::compare_and_swap(KernelWindow(3, 4), KernelWindow(3, 2), context);
105 119270 Comparator::compare_and_swap(KernelWindow(3, 2), KernelWindow(3, 1), context);
106 119270 Comparator::max(KernelWindow(3, 4), KernelWindow(3, 3), context);
107 119270 Comparator::max(KernelWindow(3, 3), KernelWindow(3, 2), context);
108 // sort row 4
109 119270 Comparator::compare_and_swap(KernelWindow(4, 3), KernelWindow(4, 0), context);
110 119270 Comparator::compare_and_swap(KernelWindow(4, 4), KernelWindow(4, 1), context);
111 119270 Comparator::compare_and_swap(KernelWindow(4, 2), KernelWindow(4, 0), context);
112 119270 Comparator::max(KernelWindow(4, 3), KernelWindow(4, 1), context);
113 119270 Comparator::compare_and_swap(KernelWindow(4, 1), KernelWindow(4, 0), context);
114 119270 Comparator::max(KernelWindow(4, 4), KernelWindow(4, 2), context);
115 119270 Comparator::max(KernelWindow(4, 2), KernelWindow(4, 1), context);
116 // sort dig 0
117 119270 Comparator::min(KernelWindow(2, 1), KernelWindow(0, 3), context);
118 119270 Comparator::min(KernelWindow(3, 0), KernelWindow(1, 2), context);
119 119270 Comparator::min(KernelWindow(3, 0), KernelWindow(2, 1), context);
120 // sort dig 1
121 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(0, 4), context);
122 119270 Comparator::compare_and_swap(KernelWindow(4, 0), KernelWindow(1, 3), context);
123 119270 Comparator::compare_and_swap(KernelWindow(2, 2), KernelWindow(0, 4), context);
124 119270 Comparator::compare_and_swap(KernelWindow(3, 1), KernelWindow(1, 3), context);
125 119270 Comparator::min(KernelWindow(1, 3), KernelWindow(0, 4), context);
126 119270 Comparator::compare_and_swap(KernelWindow(4, 0), KernelWindow(2, 2), context);
127 119270 Comparator::min(KernelWindow(2, 2), KernelWindow(1, 3), context);
128 119270 Comparator::max(KernelWindow(4, 0), KernelWindow(3, 1), context);
129 119270 Comparator::max(KernelWindow(3, 1), KernelWindow(2, 2), context);
130 // sort dig 2
131 119270 Comparator::max(KernelWindow(3, 2), KernelWindow(1, 4), context);
132 119270 Comparator::max(KernelWindow(4, 1), KernelWindow(2, 3), context);
133 119270 Comparator::max(KernelWindow(2, 3), KernelWindow(1, 4), context);
134 119270 Comparator::compare_and_swap(KernelWindow(3, 0), KernelWindow(1, 4), context);
135 119270 Comparator::min(KernelWindow(2, 2), KernelWindow(1, 4), context);
136 119270 Comparator::max(KernelWindow(3, 0), KernelWindow(2, 2), context);
137 119270 output_vec = KernelWindow(2, 2);
138 119270 }
139 } // namespace KLEIDICV_TARGET_NAMESPACE
140
141 #endif // KLEIDICV_MEDIAN_BLUR_SORTING_NETWORK_5X5_H
142