# Effective Implementation of Edge-Preserving Filtering on CPU Microarchitectures
## 7 Experimental Results
### Influence of Denormalized Numbers  
We compared the proposed methods with the straightforward approach (none) and four counter-approaches for denormalized numbers. These approaches involve converting denormalized numbers to normal numbers (convert) and using FTZ and/or DAZ flags (FTZ, DAZ, and FTZ and DAZ). The convert implementation clips a calculated value to a normal number value in the weight calculation by means of a min-operation with the minimal value of the normal numbers, such as \(\min(exp(a)\times exp(b),v)\), where \(a\) and \(b\) are variables and \(v\) is the minimal value of the normal numbers. Figures 3-10 show the results of computational time and speedup ratio of various types of implementation on Intel Core i9 7980 XE. The computational time was taken as the median value of 100 trials. The parameters were identical for all filters. Notably, in the RqLSL/RqL and MqL implementation, sqrt was used as the quantization function, and \(n=1\). These figures indicate that the proposed methods for handing denormalized number were the fastest among the other approaches for each implementation. The proposed methods were up to four-times faster than the straightforward approach. In many cases, the none implementation using double was faster than that using float. The range of magnitudes of double was larger than that of float. Hence, the occurrence frequency of denormalized numbers was lower. In the case of double, however, there was no significant speedup in all approaches for managing denormalized numbers. Because double had twice the byte length compared to float, the corresponding computational time was approximately twice as long, as well. Therefore, the implementation using double was slower than that using float when the influence of denormalized numbers was eliminated. In the RqL of the Gaussian range and the non-local means filters and the MqL of the bilateral and bilateral non-local means filters, the speedup ratio of the proposed methods was almost the same as that of the convert, FTZ and FTZ and DAZ implementation. In these approaches, denormalized numbers occurred only when LUTs were created, and the denormalized numbers were eliminated during LUT creation. Thus, during the filtering process, denormalized numbers did not occur. Therefore, the RqL and MqL implementation could achieve the same effect as the proposed methods did. In addition, DAZ had almost no effect because DAZ was executed only if an operand was a denormalized number. As shown in Figure 1, denormalized numbers occurred in edges. Therefore, if the weight of the range kernel was small or the multiplication of the range kernel with the spatial kernel was possible, denormalized numbers were likely to occur. \begin{table}
\begin{tabular}{l l l l l l l l} \hline \hline
**CPU** & \begin{tabular}{l} **Intel Core i7** \\ **3970X** \\ \end{tabular} & \begin{tabular}{l} **Intel Core i7** \\ **4960X** \\ \end{tabular} & \begin{tabular}{l} **Intel Core i7** \\ **5960X** \\ \end{tabular} & \begin{tabular}{l} **Intel Core i7** \\ **6950X** \\ \end{tabular} & \begin{tabular}{l} **Intel Core i7** \\ **7980 XE** \\ \end{tabular} & \begin{tabular}{l} **Intel Core i9** \\ **1920X** \\ \end{tabular} \\ \hline memory & \begin{tabular}{l} DDR3-1600 \\ 16 GBytes \\ \end{tabular} & \begin{tabular}{l} DDR3-1866 \\ 16 GBytes \\ \end{tabular} & \begin{tabular}{l} DDR4-2133 \\ 32 GBytes \\ \end{tabular} & \begin{tabular}{l} DDR4-2400 \\ 32 GBytes \\ \end{tabular} & \begin{tabular}{l} DDR4-2400 \\ 16 GBytes \\ \end{tabular} & \
\begin{tabular}{l} DDR4-2400 \\ 16 GBytes \\ \end{tabular} &
\begin{tabular}{l} DDR4-2400 \\ 16 GBytes \\ \end{tabular} \\ \hline \multirow{2}{*}{SIMD instruction sets} & SSE4.2 & SSE4.2 & SSE4.2 & SSE4.2 & AVX/AVX2 & SSE4.2 \\  & AVX & AVX/AVX2 & AVX/AVX2 & AVX/AVX2 & AVX/AVX2 \\  & AVX & FMA3 & FMA3 & FMA3 & FMA3 & FMA3 \\ \hline \hline \end{tabular}
\end{table} 
Table 2: Computers used in the experiments. Figure 4: Speedup ratio of bilateral filter on Intel Core i9 7980 XE: (**a**) SSE; (**b**) AVX/AVX2; (**c**) AVX512.