1 #LyX file created by tex2lyx 2.0.2
9 %\usepackage[T1]{fontenc}
10 %\usepackage[latin1]{inputenc}
11 %\usepackage[cyr]{aeguill}
12 %\usepackage[frenchb]{babel}
14 \@ifundefined{definecolor}
15 {\usepackage{color}}{}
16 \usepackage{xcolor}\graphicspath{{img/}}
17 \usepackage{subfigure}%\usepackage{epsfig}
18 %\usepackage[sectionbib]{bibunits}
19 \usepackage{multicol}\usepackage{multirow}\usepackage{tabularx}\usepackage[ruled,lined,linesnumbered]{algorithm2e}\usepackage{array}
22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25 \usepackage{listings}\lstset{
28 basicstyle=\footnotesize\ttfamily,
39 % keywordstyle=[1]\textbf,
40 %identifierstyle=\textbf,
42 stringstyle=\ttfamily,
44 % framexleftmargin=17pt,
45 % framexrightmargin=5pt,
46 % framexbottommargin=4pt,
47 backgroundcolor=\color{lightgray},
50 \usepackage{caption}%\DeclareCaptionFont{blue}{\color{blue}}
51 %\captionsetup[lstlisting]{singlelinecheck=false, labelfont={blue}, textfont={blue}}
53 %\DeclareCaptionFont{white}{\color{white}}
54 %\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
55 %\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singleline}
56 %%%%%%%%%%%%%%%%%%%%%%%% Fin Listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 \newcommand{\kl}{\includegraphics[scale=0.4]{kernLeft.png}~}
59 \newcommand{\kr}{\includegraphics[scale=0.4]{kernRight.png}}
65 % \VA{Thomas Davenport}{Senior Adjutant to the Junior Marketing VP}
71 % A component part for an electronic item is
72 % manufactured at one of three different factories, and then delivered to
73 % the main assembly line.Of the total number supplied, factory A supplies
74 % 50\%, factory B 30\%, and factory C 20\%. Of the components
75 % manufactured at factory A, 1\% are faulty and the corresponding
76 % proportions for factories B and C are 4\% and 2\% respectively. A
77 % component is picked at random from the assembly line. What is the
78 % probability that it is faulty?
83 % \mbox{var}\widehat{\Delta} = \sum_{j = 1}^t \sum_{k = j+1}^t
84 % \mbox{var}\,(\hat{\alpha}_j - \hat{\alpha}_k) = \sum_{j = 1}^t
85 % \sum_{k = j+1}^t \sigma^2(1/n_j + 1/n_k). \label{2delvart2}
90 % \Boxhead{Box Title Here}
93 % \begin{theorem}\label{1th:Z_m}
94 % Let $m$ be a prime number. With the addition and multiplication as
95 % defined above, $Z_m$ is a field.
101 % \begin{notelist}{000000}
102 % \notes{Note:}{The process of integrating reengineering is best accomplished with an engineer, a dog, and a cat.}
107 % \VH{Think About It...}
110 % \VTA{The Information Revolution}{Business Week}
114 %\begin{definition}\label{1def:linearcomb}{}\end{definition}
122 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
128 basicstyle=\footnotesize\ttfamily,
137 keywordstyle=\textbf,
139 % keywordstyle=[1]\textbf,
140 %identifierstyle=\textbf,
141 commentstyle=\textbf,
142 stringstyle=\ttfamily,
144 % framexleftmargin=17pt,
145 % framexrightmargin=5pt,
146 % framexbottommargin=4pt,
147 backgroundcolor=\color{lightgray},
150 %\DeclareCaptionFont{blue}{\color{blue}}
151 %\captionsetup[lstlisting]{singlelinecheck=false, labelfont={blue}, textfont={blue}}
153 %\DeclareCaptionFont{white}{\color{white}}
154 %\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
155 %\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singleline}
156 %%%%%%%%%%%%%%%%%%%%%%%% Fin Listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
161 \use_default_options false
163 \language_package none
165 \fontencoding default
168 \font_typewriter courier
169 \font_default_family default
186 \paperorientation portrait
191 \paragraph_separation indent
192 \paragraph_indentation default
193 \quotes_language english
196 \paperpagestyle default
197 \tracking_changes false
198 \output_changes false
201 \html_be_strict false
208 Fine-tuned high-speed implementation
209 \begin_inset Newline newline
212 of a GPU-based median filter.
215 \begin_layout Standard
221 \begin_layout Standard
228 \begin_layout Standard
232 begin{@twocolumnfalse}
235 \begin_layout Standard
242 \begin_layout Standard
249 \begin_layout Standard
251 Median filtering is a well-known method used in a wide range of application frameworks as well as a standalone filter, especially for
253 textit{salt-and-pepper} denoising. It is able to highly reduce the power of noise while minimizing edge blurring.
256 \begin_layout Standard
258 Currently, existing algorithms and implementations are quite efficient but may be improved as far as processing speed is concerned, which has led us to further investigate the specificities of modern GPUs.
261 \begin_layout Standard
263 In this paper, we propose the GPU implementation of fixed-size kernel median filters, able to output up to 1.85 billion pixels per second on C2070 Tesla cards.
266 \begin_layout Standard
268 Based on a Branchless Vectorized Median class algorithm and implemented through memory fine tuning and the use of GPU registers, our median drastically outperforms existing implementations, resulting, as far as we know, in the fastest median filter to date.
271 \begin_layout Standard
278 \begin_layout Standard
285 \begin_layout Standard
295 \begin_layout Section
300 \begin_layout Standard
302 First introduced by Tukey in
303 \begin_inset CommandInset citation
310 , median filtering has been widely studied since then, and many researchers have proposed efficient implementations of it, adapted to various hypothesis, architectures and processors. Originally, its main drawbacks were its compute complexity, its non linearity and its data-dependent runtime. Several researchers have addressed these issues and designed, for example, efficient histogram-based median filters featuring predictable runtimes
311 \begin_inset CommandInset citation
314 key "Huang:1981:TDS:539567, Weiss:2006:FMB:1179352.1141918"
318 . More recently, authors have managed to take advantage of the newly opened perspectives offered by modern GPUs, to develop CUDA-based filters such as the Branchless Vectorized Median filter (BVM)
319 \begin_inset CommandInset citation
322 key "5402362, chen09"
326 which allows very interesting runtimes and the histogram-based, PCMF median filter
327 \begin_inset CommandInset citation
334 which was the fastest median filter implementation to our knowledge.
337 \begin_layout Standard
339 The use of a GPU as a general-purpose computing processor raises the issue of data transfers, especially when kernel runtime is fast and/or when large data sets are processed. In certain cases, data transfers between GPU and CPU are slower than the actual computation on GPU, even though global GPU processes can prove faster than similar ones run on CPU. In the following section, we propose the overall code structure to be used with our median kernels. For more concision and readability, our coding will be restricted to 8 or 16 bit gray-level input images whose height (
340 \begin_inset Formula $H$
344 \begin_inset Formula $W$
347 ) are both multiples of 512 pixels. Let us also point out that the following implementation, targeted on Nvidia Tesla GPU (Fermi architecture, compute capability 2.x), may easily be adapted to other models e.g. those of compute capability 1.3.
350 \begin_layout Section
355 \begin_layout Standard
358 \begin_inset CommandInset ref
360 reference "algo:memcopy"
364 describes how data is handled in our code. Input image data is stored in the GPU's texture memory so as to benefit from the 2-D caching mechanism. After kernel execution, copying output image back to CPU memory is done by use of pinned memory, which drastically accelerates data transfer.
365 \begin_inset Float algorithm
371 \begin_layout Standard
377 \begin_layout Standard
390 \begin_layout Standard
401 \begin_layout Standard
412 \begin_layout Standard
423 \begin_layout Standard
434 \begin_layout Standard
443 allocate and populate CPU memory
451 \begin_layout Standard
460 allocate CPU pinned-memory
468 \begin_layout Standard
477 allocate GPU global memory
485 \begin_layout Standard
494 declare GPU texture reference
502 \begin_layout Standard
519 \begin_layout Standard
540 \begin_layout Standard
558 \begin_inset CommandInset label
560 name "algo:memcopy:H2D"
568 \begin_layout Standard
581 \begin_layout Standard
594 \begin_layout Standard
607 \begin_layout Standard
620 \begin_layout Standard
631 \begin_layout Standard
639 \begin_inset CommandInset label
641 name "algo:memcopy:kernel"
649 \begin_layout Standard
667 \begin_inset CommandInset label
669 name "algo:memcopy:D2H"
677 \begin_layout Standard
689 \begin_layout Standard
693 Global memory management on CPU and GPU sides.
701 \begin_layout Standard
706 \begin_inset CommandInset label
720 \begin_layout Section
722 Implementing a fast median filter
725 \begin_layout Subsection
730 \begin_layout Standard
732 Designing a 2-D median filter basically consists in defining a square window
733 \begin_inset Formula $H(i,j)$
737 \begin_inset Formula $I(i,j)$
740 of the input image, containing
741 \begin_inset Formula $n=k\times k$
744 pixels and centered on
745 \begin_inset Formula $I(i,j)$
749 \begin_inset Formula $I'(i,j)$
752 is the median value of the gray level values of the
753 \begin_inset Formula $k\times k$
757 \begin_inset Formula $H(i,j)$
761 \begin_inset CommandInset ref
767 illustrates this principle with an example of a 5x5 median filter applied on pixel
768 \begin_inset Formula $I(5,6)$
774 \begin_layout Standard
776 Obviously, one key issue is the selection method that identifies the median value, which can be done using either histogram-based or sorting methods. But, as shown in figure
777 \begin_inset CommandInset ref
783 , since two neighboring pixels share part of the values to be sorted, a second key issue is how to rule redundancy between consecutive positions of the running window
784 \begin_inset Formula $H(i,j)$
790 \begin_layout Standard
793 \begin_inset Float figure
799 \begin_layout Standard
805 \begin_layout Standard
818 \begin_layout Standard
824 times 5$ median filtering applied on pixel of coordinates (5,6)]{
830 \begin_inset Graphics
831 filename median_1.png
840 \begin_layout Standard
848 \begin_inset space \qquad{}
856 \begin_layout Standard
860 subfigure[window overlapping in $5
862 times 5$ median filtering]{
868 \begin_inset Graphics
869 filename median_overlap.png
878 \begin_layout Standard
886 \begin_inset Newline newline
892 \begin_layout Standard
895 \begin_inset Formula $5\times 5$
906 \begin_layout Standard
909 \begin_inset CommandInset label
923 \begin_layout Subsection
928 \begin_layout Standard
930 As register access is at least 20 times faster than all the other memory types available on the GPU, it is natural to turn to the use of registers as a means to store temporary data, keeping in mind that on the
934 architecture, each individual thread can use a maximum of 63 registers within the limit of 32K per thread block. Consequently, it is important to use registers sparingly in order to preserve high pixel throughput values: to do so, we use the iterative
938 algorithm. Its principle is, at each iteration, to identify and then to eliminate (forget) both elements showing the maximum and the minimum values among the current list, then to add the next candidate element left in the original list, till none is left; the last value remaining actually is the global median value. Figure
939 \begin_inset CommandInset ref
950 \begin_inset Formula $3\times3$
953 pixel median filter. For clarity reasons, the nine values have been represented in a row.
954 \begin_inset Float figure
960 \begin_layout Standard
966 \begin_layout Standard
976 \begin_inset Graphics
977 filename forgetful_selectionb.png
985 \begin_layout Standard
987 Determination of the Median value by the forgetful selection process, applied to a
988 \begin_inset Formula $3\times 3$
999 \begin_layout Standard
1002 \begin_inset CommandInset label
1016 \begin_layout Standard
1018 The minimum register count
1019 \begin_inset Formula $R_{n}$
1022 needed to start this iterative selection process among
1023 \begin_inset Formula $k \times k$
1027 \begin_inset Formula \[R_{n}=\lceil \frac{n}{2}\rceil+1\]
1030 The selection of both
1034 is implemented through a basic 2-element swapping function. This ensures that the GPU kernel code is free of divergent branches liable to severely impact performances.
1037 \begin_layout Subsection
1042 \begin_layout Standard
1044 Optimizing a GPU kernel also means hiding latencies. The offered massive thread parallelism helps in doing so transparently but, considering the actual computation performed by each thread, optimization may be taken a few steps further:
1045 \begin_inset Newline newline
1048 First, we maximized the Instruction Level Parallelism inside the
1052 method by re-arranging the instruction sequence of an incomplete
1057 \begin_inset CommandInset citation
1060 key "Batcher:1968:SNA:1468075.1468121, cormen2001introduction"
1064 so as to reduce the data dependency of consecutive instructions.
1065 \begin_inset Newline newline
1068 Second, we divided thread block size by 2, having each thread perform the computation of two neighbor input pixels instead of just one, thus keeping the grid size unchanged while reducing the effect of global memory access latency. Additionally, window overlapping also had to be managed, as illustrated by Figure
1069 \begin_inset CommandInset ref
1075 , in order to minimize the increase of register count per thread brought by the new computing organization. Two
1076 \begin_inset Formula $k\times k$
1079 consecutive neighboring windows share
1080 \begin_inset Formula $S_{n}=n-\sqrt{n}$
1083 pixels, which is more than the number of registers needed to perform the median selection, i.e.
1084 \begin_inset Formula $R_{n}$
1088 \begin_inset Formula $3\times 3$
1092 \begin_inset Formula $(S_{n}-R_{n}+1)$
1095 first selection stages can then be considered common to both windows, leaving only the
1096 \begin_inset Formula $k$
1099 non-shared pixels of each window to be processed separately. The above technique saves
1100 \begin_inset Formula $k+1$
1103 registers for each pair of input pixels, which means that each thread block now uses fewer registers while processing the same pixel count, thus allowing a higher level of parallelism. Figure
1104 \begin_inset CommandInset ref
1106 reference "median5overlap"
1110 illustrates this by representing the different classes of pixels in the
1111 \begin_inset Formula $5\times5$
1114 median example: the first
1115 \begin_inset Formula $R_{25}=14$
1118 common pixels are used to generate the vector to be sorted at the first iteration, 6 more iterations are carried out with the remaining common pixels before entering into separate sorting processes.
1121 \begin_layout Subsection
1126 \begin_layout Standard
1128 Arithmetic instructions and texture fetches are easy to count but the number of element swaps needed to select the median value is data dependent and only its maximum can be evaluated. The incomplete sorting (
1132 ) and the redundancy management performed when outputing two pixels per thread lead to the instruction count below:
1135 \begin_layout Itemize
1137 5 integer multiplications and 5 integer additions to compute thread indexes and ouput pixel coordinates.
1140 \begin_layout Itemize
1143 \begin_inset Formula $2n-1$
1146 additions to compute neighbor pixel coordinates.
1149 \begin_layout Itemize
1152 \begin_inset Formula $n-\sqrt{n}$
1155 texture fetches to load gray-level values.
1158 \begin_layout Itemize
1161 \begin_inset Formula $m$
1164 -element vector and according to our selection method, the maximum number of element swaps needed to move the minimum value to the first position and the maximum to the last position is given by:
1165 \begin_inset Formula \[sc(m)=-2+\lceil\frac{3.m}{2}\rceil\]
1168 Consequently, the number of element swaps needed by the entire selection of two median values performed by one thread is inferior or equal to:
1169 \begin_inset Formula \[\left(\sum_{i=\lceil\frac{n}{2}\rceil+1}^{n-\sqrt{n}}{sc(i)}\right) + 2\left(\sum_{i=n-\sqrt{n}+1}^{n}{sc(i)}\right)\]
1172 The above sum equals 42,156 and 474 for typical window sizes of
1173 \begin_inset Formula $3\times 3$
1177 \begin_inset Formula $5\times 5$
1181 \begin_inset Formula $7\times 7$
1184 . The total instruction count is thus kept near a
1185 \begin_inset Formula $O(nlog(n))$
1191 \begin_layout Standard
1194 \begin_inset Float figure
1200 \begin_layout Standard
1206 \begin_layout Standard
1216 \begin_inset Graphics
1217 filename median5_overlap.png
1223 \begin_inset Caption
1225 \begin_layout Standard
1227 Reducing register count in a 5
1228 \begin_inset Formula $\times$
1231 5 register-only median kernel processing 2 input pixels. The first 7 forgetful selection stages are common to both processed center pixels: the first one needs 14 pixels, leaving 6 more pixels to be processedone after another.
1239 \begin_layout Standard
1242 \begin_inset CommandInset label
1244 name "median5overlap"
1256 \begin_layout Section
1261 \begin_layout Standard
1263 Runtimes have been obtained by averaging 1000 executions on a C2070 GPU card hosted by a system with one Xeon E5620
1267 \begin_layout Standard
1276 2.40GHz processor running a linux kernel 2.6.18x86_64 and CUDA v4.0. Each kernel has been run on images of sizes 512
1277 \begin_inset Formula $\times$
1281 \begin_inset Formula $\times$
1285 \begin_inset Formula $\times$
1289 \begin_inset Formula $\times$
1292 4096. Like many authors, we have used the pixel throughput value as our main performance indicator. It includes kernel runtime as well as transfer times to and from the GPU. We have also measured the maximum effective pixel throughput that our GPU/host couple is able to achieve, by running an identity kernel that fetches the gray-level of each pixel in texture memory and outputs it into global memory exclusive of any other instruction. Knowing this peak value allows us to evaluate the potential for improvement of each kernel and helps in deciding on further investigation. Those peak values are detailed in Table
1293 \begin_inset CommandInset ref
1295 reference "tabmaxtp"
1299 , which shows that the larger the image is, the higher the expected throughput is.
1302 \begin_layout Standard
1305 \begin_inset Float figure
1311 \begin_layout Standard
1317 \begin_layout Standard
1330 \begin_layout Standard
1336 times$512 pixel input image.]{
1342 \begin_inset Graphics
1343 filename comp512.png
1352 \begin_layout Standard
1363 \begin_layout Standard
1369 times$4096 pixel input image]{
1375 \begin_inset Graphics
1385 \begin_layout Standard
1393 \begin_inset Caption
1395 \begin_layout Standard
1397 Pixel throughput value comparison, in million pixels per second, of several implementation against our PRMF. From left to right: PCMF, BVM, PRMF, ArrayFire (impossible with 4096
1398 \begin_inset Formula $\times$
1409 \begin_layout Standard
1412 \begin_inset CommandInset label
1426 \begin_layout Standard
1432 \begin_layout Standard
1441 \begin_layout Standard
1449 \begin_inset Float table
1456 \begin_layout Standard
1462 \begin_layout Standard
1474 \begin_inset FormulaMacro
1475 \newcommand{\whline}{\noalign{\global\savedwidth
1476 \arrayrulewidth\global\arrayrulewidth 1.5pt}
1477 \hline \noalign{\global\arrayrulewidth
1483 \begin_inset FormulaMacro
1484 \renewcommand{\arraystretch}{1.5}
1491 \begin_layout Standard
1503 \begin_inset Tabular
1504 <lyxtabular version="3" rows="13" columns="7">
1505 <features tabularvalignment="middle">
1506 <column alignment="center" valignment="top">
1507 <column alignment="center" valignment="top">
1508 <column alignment="center" valignment="top">
1509 <column alignment="center" valignment="top">
1510 <column alignment="center" valignment="top">
1511 <column alignment="center" valignment="top">
1512 <column alignment="center" valignment="top">
1514 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1517 \begin_layout Standard
1526 <cell multicolumn="1" alignment="none" valignment="top" topline="true" leftline="true" rightline="true" usebox="none" special="c">
1529 \begin_layout Standard
1542 <cell multicolumn="2" alignment="center" valignment="top" topline="true" usebox="none">
1547 <cell multicolumn="2" alignment="center" valignment="top" topline="true" usebox="none">
1552 <cell multicolumn="1" alignment="none" valignment="top" topline="true" rightline="true" usebox="none" special="c">
1555 \begin_layout Standard
1568 <cell multicolumn="2" alignment="center" valignment="top" topline="true" usebox="none">
1573 <cell multicolumn="2" alignment="center" valignment="top" topline="true" usebox="none">
1580 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1583 \begin_layout Standard
1591 \begin_layout Standard
1601 \begin_inset Formula $\rightarrow$
1608 \begin_layout Standard
1620 <cell alignment="none" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1625 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
1630 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
1635 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
1640 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
1645 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
1652 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1655 \begin_layout Standard
1660 \begin_inset Formula $\downarrow$
1667 \begin_layout Standard
1679 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1682 \begin_layout Standard
1690 \begin_layout Standard
1703 \begin_layout Standard
1715 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1720 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1725 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1730 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1735 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1742 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1745 \begin_layout Standard
1753 \begin_layout Standard
1765 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1768 \begin_layout Standard
1776 \begin_layout Standard
1789 \begin_layout Standard
1801 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1806 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1811 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1816 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1821 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1828 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1831 \begin_layout Standard
1839 \begin_layout Standard
1851 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1854 \begin_layout Standard
1862 \begin_layout Standard
1875 \begin_layout Standard
1887 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1892 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1897 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1902 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1907 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1914 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1917 \begin_layout Standard
1925 \begin_layout Standard
1937 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
1940 \begin_layout Standard
1948 \begin_layout Standard
1958 \begin_inset Formula $\rightarrow$
1965 \begin_layout Standard
1977 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1982 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1987 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1992 <cell alignment="none" valignment="top" rightline="true" usebox="none">
1997 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2004 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
2007 \begin_layout Standard
2015 \begin_layout Standard
2027 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
2030 \begin_layout Standard
2038 \begin_layout Standard
2048 \begin_inset Formula $\rightarrow$
2055 \begin_layout Standard
2067 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2072 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2077 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2082 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2087 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2094 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
2097 \begin_layout Standard
2105 \begin_layout Standard
2117 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
2120 \begin_layout Standard
2128 \begin_layout Standard
2141 \begin_layout Standard
2153 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2158 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2163 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2168 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2173 <cell alignment="none" valignment="top" rightline="true" usebox="none">
2180 <cell alignment="center" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
2183 \begin_layout Standard
2191 \begin_layout Standard
2203 <cell alignment="none" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
2208 <cell alignment="none" valignment="top" bottomline="true" rightline="true" usebox="none">
2213 <cell alignment="none" valignment="top" bottomline="true" rightline="true" usebox="none">
2218 <cell alignment="none" valignment="top" bottomline="true" rightline="true" usebox="none">
2223 <cell alignment="none" valignment="top" bottomline="true" rightline="true" usebox="none">
2228 <cell alignment="none" valignment="top" bottomline="true" rightline="true" usebox="none">
2235 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2238 \begin_layout Standard
2243 \begin_inset Formula $\times$
2251 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2254 \begin_layout Standard
2263 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2266 \begin_layout Standard
2275 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2278 \begin_layout Standard
2287 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2290 \begin_layout Standard
2299 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2302 \begin_layout Standard
2311 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2314 \begin_layout Standard
2325 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2328 \begin_layout Standard
2333 \begin_inset Formula $\times$
2341 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2344 \begin_layout Standard
2353 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2356 \begin_layout Standard
2365 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2368 \begin_layout Standard
2377 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2380 \begin_layout Standard
2389 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2392 \begin_layout Standard
2401 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2404 \begin_layout Standard
2415 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2418 \begin_layout Standard
2423 \begin_inset Formula $\times$
2431 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2434 \begin_layout Standard
2443 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2446 \begin_layout Standard
2455 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2458 \begin_layout Standard
2467 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2470 \begin_layout Standard
2479 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2482 \begin_layout Standard
2491 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2494 \begin_layout Standard
2505 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
2508 \begin_layout Standard
2513 \begin_inset Formula $\times$
2521 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
2524 \begin_layout Standard
2533 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
2536 \begin_layout Standard
2545 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
2548 \begin_layout Standard
2557 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
2560 \begin_layout Standard
2569 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
2572 \begin_layout Standard
2581 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
2584 \begin_layout Standard
2601 \begin_inset Caption
2603 \begin_layout Standard
2605 Time cost of data transfer for each image size and gray-level format on C2070 GPU.
2613 \begin_layout Standard
2616 \begin_inset CommandInset label
2630 \begin_layout Section
2635 \begin_layout Standard
2637 The main contribution of this work is to show how to tune a CUDA GPU implementation in order to achieve the highest pixel throughput values. Runtimes, as well as pixel throughput values are gathered in Table
2638 \begin_inset CommandInset ref
2640 reference "tabresults"
2645 \begin_inset CommandInset ref
2651 compares the throughput values of several implementations against ours, labeled PRMF for Parallel Register-only Median Filter. Due to the lack of available source code, our comparison is based on the most recent results published in
2652 \begin_inset CommandInset citation
2655 key "Sanchez-2-2012"
2659 , obtained with the same GPU as ours and with 8 bit-coded gray-level images. While the algorithm implemented here is similar to the one in
2663 , what makes the difference is our fine tuning of the implementation that leads to the fastest GPU median filter known to date with 1854
2664 \begin_inset space ~
2668 MPix/s. Let us also note that such considerable throughput values come very close to the peak effective pixel throughput value of 2444
2669 \begin_inset space ~
2673 Mpix/s allowed by our developpement platform. Consequently further investigation would likely bring little performance improvement.
2676 \begin_layout Standard
2682 \begin_layout Standard
2691 \begin_layout Standard
2702 \begin_layout Standard
2711 \begin_layout Standard
2719 \begin_inset Float table
2726 \begin_layout Standard
2729 \begin_inset FormulaMacro
2730 \newcommand{\whline}{\noalign{\global\savedwidth
2731 \arrayrulewidth\global\arrayrulewidth 1.5pt}
2732 \hline \noalign{\global\arrayrulewidth
2738 \begin_inset FormulaMacro
2739 \renewcommand{\arraystretch}{1.5}
2746 \begin_layout Standard
2758 \begin_inset Tabular
2759 <lyxtabular version="3" rows="6" columns="3">
2760 <features tabularvalignment="middle">
2761 <column alignment="center" valignment="top">
2762 <column alignment="center" valignment="top">
2763 <column alignment="center" valignment="top">
2765 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2768 \begin_layout Standard
2776 \begin_layout Standard
2786 \begin_inset Formula $\rightarrow$
2793 \begin_layout Standard
2805 <cell alignment="none" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2810 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
2817 <cell alignment="center" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
2820 \begin_layout Standard
2825 \begin_inset Formula $\downarrow$
2832 \begin_layout Standard
2844 <cell alignment="center" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
2847 \begin_layout Standard
2855 \begin_layout Standard
2863 \begin_inset Formula $\mathbf{ T_8}$
2870 \begin_layout Standard
2882 <cell alignment="center" valignment="top" bottomline="true" rightline="true" usebox="none">
2885 \begin_layout Standard
2893 \begin_layout Standard
2901 \begin_inset Formula $\mathbf{T_{16}}$
2908 \begin_layout Standard
2922 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2925 \begin_layout Standard
2930 \begin_inset Formula $\times$
2938 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2941 \begin_layout Standard
2950 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2953 \begin_layout Standard
2964 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2967 \begin_layout Standard
2972 \begin_inset Formula $\times$
2980 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2983 \begin_layout Standard
2992 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
2995 \begin_layout Standard
3006 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3009 \begin_layout Standard
3014 \begin_inset Formula $\times$
3022 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3025 \begin_layout Standard
3034 <cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
3037 \begin_layout Standard
3048 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
3051 \begin_layout Standard
3056 \begin_inset Formula $\times$
3064 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
3067 \begin_layout Standard
3076 <cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
3079 \begin_layout Standard
3096 \begin_inset Caption
3098 \begin_layout Standard
3100 Maximum effective pixel throughput values for
3101 \begin_inset Formula $T_8$
3105 \begin_inset Formula $T_{16}$
3108 (in MPixel per second) on C2070, achieved when processing 8 and 16 bit-coded gray-level images.
3116 \begin_layout Standard
3119 \begin_inset CommandInset label
3133 \begin_layout Standard
3139 \begin_layout Standard
3148 \begin_layout Standard
3159 \begin_layout Standard
3168 \begin_layout Standard
3176 \begin_inset Float table
3183 \begin_layout Standard
3186 \begin_inset FormulaMacro
3187 \newcommand{\whline}{\noalign{\global\savedwidth
3188 \arrayrulewidth\global\arrayrulewidth 1.5pt}
3189 \hline \noalign{\global\arrayrulewidth
3195 \begin_inset FormulaMacro
3196 \renewcommand{\arraystretch}{1.5}
3203 \begin_layout Standard
3215 \begin_inset Tabular
3216 <lyxtabular version="3" rows="15" columns="11">
3217 <features tabularvalignment="middle">
3218 <column alignment="center" valignment="top">
3219 <column alignment="left" valignment="top">
3220 <column alignment="center" valignment="top">
3221 <column alignment="center" valignment="top">
3222 <column alignment="center" valignment="top">
3223 <column alignment="center" valignment="top">
3224 <column alignment="center" valignment="top">
3225 <column alignment="center" valignment="top">
3226 <column alignment="center" valignment="top">
3227 <column alignment="center" valignment="top">
3228 <column alignment="center" valignment="top">
3230 <cell multicolumn="1" alignment="none" valignment="top" topline="true" leftline="true" rightline="true" usebox="none" special="l|">
3233 \begin_layout Standard
3241 \begin_layout Standard
3251 \begin_inset Formula $\rightarrow$
3258 \begin_layout Standard
3270 <cell multicolumn="2" alignment="center" valignment="top" topline="true" usebox="none">
3275 <cell alignment="none" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3280 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3285 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3290 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3295 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3300 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3305 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3310 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3315 <cell alignment="none" valignment="top" topline="true" rightline="true" usebox="none">
3322 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3325 \begin_layout Standard
3330 \begin_inset Formula $\downarrow$
3337 \begin_layout Standard
3348 \begin_layout Standard
3360 <cell alignment="left" valignment="top" rightline="true" usebox="none">
3363 \begin_layout Standard
3370 \begin_inset Formula $\times$
3380 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3383 \begin_layout Standard
3390 \begin_inset Formula $\times$
3400 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3403 \begin_layout Standard
3410 \begin_inset Formula $\times$
3420 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3425 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3430 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3435 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3440 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3445 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3450 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3457 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3460 \begin_layout Standard
3468 \begin_layout Standard
3481 \begin_layout Standard
3494 \begin_layout Standard
3505 \begin_layout Standard
3516 \begin_layout Standard
3527 \begin_layout Standard
3537 \begin_inset Formula $^2$
3544 \begin_layout Standard
3555 \begin_layout Standard
3567 <cell alignment="left" valignment="top" rightline="true" usebox="none">
3570 \begin_layout Standard
3579 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3582 \begin_layout Standard
3591 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3594 \begin_layout Standard
3603 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3606 \begin_layout Standard
3615 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3620 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3625 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3630 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3635 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3640 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3647 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3652 <cell alignment="left" valignment="top" rightline="true" usebox="none">
3655 \begin_layout Standard
3660 \begin_inset Formula $T_{8}$
3668 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3671 \begin_layout Standard
3680 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3683 \begin_layout Standard
3692 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3695 \begin_layout Standard
3704 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3709 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3714 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3719 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3724 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3729 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3736 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3741 <cell alignment="left" valignment="top" rightline="true" usebox="none">
3744 \begin_layout Standard
3749 \begin_inset Formula $T_{16}$
3757 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3760 \begin_layout Standard
3769 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3772 \begin_layout Standard
3781 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3784 \begin_layout Standard
3793 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3798 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3803 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3808 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3813 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3818 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3825 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3828 \begin_layout Standard
3836 \begin_layout Standard
3849 \begin_layout Standard
3862 \begin_layout Standard
3873 \begin_layout Standard
3884 \begin_layout Standard
3895 \begin_layout Standard
3905 \begin_inset Formula $^2$
3912 \begin_layout Standard
3923 \begin_layout Standard
3935 <cell alignment="left" valignment="top" rightline="true" usebox="none">
3938 \begin_layout Standard
3947 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
3950 \begin_layout Standard
3959 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3962 \begin_layout Standard
3971 <cell alignment="center" valignment="top" rightline="true" usebox="none">
3974 \begin_layout Standard
3983 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3988 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3993 <cell alignment="none" valignment="top" rightline="true" usebox="none">
3998 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4003 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4008 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4015 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4020 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4023 \begin_layout Standard
4028 \begin_inset Formula $T_{8}$
4036 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4039 \begin_layout Standard
4048 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4051 \begin_layout Standard
4060 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4063 \begin_layout Standard
4072 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4077 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4082 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4087 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4092 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4097 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4104 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4109 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4112 \begin_layout Standard
4117 \begin_inset Formula $T_{16}$
4125 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4128 \begin_layout Standard
4137 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4140 \begin_layout Standard
4149 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4152 \begin_layout Standard
4161 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4166 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4171 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4176 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4181 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4186 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4193 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4196 \begin_layout Standard
4204 \begin_layout Standard
4217 \begin_layout Standard
4230 \begin_layout Standard
4241 \begin_layout Standard
4252 \begin_layout Standard
4263 \begin_layout Standard
4273 \begin_inset Formula $^2$
4280 \begin_layout Standard
4291 \begin_layout Standard
4303 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4306 \begin_layout Standard
4315 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4318 \begin_layout Standard
4327 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4330 \begin_layout Standard
4339 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4342 \begin_layout Standard
4351 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4356 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4361 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4366 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4371 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4376 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4383 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4388 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4391 \begin_layout Standard
4396 \begin_inset Formula $T_{8}$
4404 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4407 \begin_layout Standard
4416 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4419 \begin_layout Standard
4428 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4431 \begin_layout Standard
4440 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4445 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4450 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4455 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4460 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4465 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4472 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4477 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4480 \begin_layout Standard
4485 \begin_inset Formula $T_{16}$
4493 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4496 \begin_layout Standard
4505 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4508 \begin_layout Standard
4517 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4520 \begin_layout Standard
4529 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4534 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4539 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4544 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4549 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4554 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4561 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4564 \begin_layout Standard
4572 \begin_layout Standard
4585 \begin_layout Standard
4598 \begin_layout Standard
4609 \begin_layout Standard
4620 \begin_layout Standard
4631 \begin_layout Standard
4641 \begin_inset Formula $^2$
4648 \begin_layout Standard
4659 \begin_layout Standard
4671 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4674 \begin_layout Standard
4683 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4686 \begin_layout Standard
4695 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4698 \begin_layout Standard
4707 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4710 \begin_layout Standard
4719 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4724 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4729 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4734 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4739 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4744 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4751 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4756 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4759 \begin_layout Standard
4764 \begin_inset Formula $T_{8}$
4772 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4775 \begin_layout Standard
4784 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4787 \begin_layout Standard
4796 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4799 \begin_layout Standard
4808 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4813 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4818 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4823 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4828 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4833 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4840 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4845 <cell alignment="left" valignment="top" rightline="true" usebox="none">
4848 \begin_layout Standard
4853 \begin_inset Formula $T_{16}$
4861 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4864 \begin_layout Standard
4873 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4876 \begin_layout Standard
4885 <cell alignment="center" valignment="top" rightline="true" usebox="none">
4888 \begin_layout Standard
4897 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4902 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4907 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4912 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4917 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4922 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4929 <cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
4932 \begin_layout Standard
4940 \begin_layout Standard
4954 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4959 <cell alignment="none" valignment="top" leftline="true" rightline="true" usebox="none">
4964 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4969 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4974 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4979 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4984 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4989 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4994 <cell alignment="none" valignment="top" rightline="true" usebox="none">
4999 <cell alignment="none" valignment="top" rightline="true" usebox="none">
5012 \begin_inset Caption
5014 \begin_layout Standard
5016 Runtime and pixel throughput of fast median kernels processing 8 and 16 bit-coded gray-level images and run by C2070 GPU.
5024 \begin_layout Standard
5027 \begin_inset CommandInset label
5041 \begin_layout Standard
5044 \begin_inset CommandInset bibtex