<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<title>OpenCV: cudev/include/opencv2/cudev/warp/reduce.hpp File Reference</title>
<link href="../../opencv.ico" rel="shortcut icon" type="image/x-icon" />
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
//<![CDATA[
MathJax.Hub.Config(
{
  TeX: {
      Macros: {
          matTT: [ "\\[ \\left|\\begin{array}{ccc} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{array}\\right| \\]", 9],
          fork: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ \\end{array} \\right.", 4],
          forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
          vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
          vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
          hdotsfor: ["\\dots", 1],
          mathbbm: ["\\mathbb{#1}", 1],
          bordermatrix: ["\\matrix{#1}", 1]
      }
  }
}
);
//]]>
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<!--#include virtual="/google-search.html"-->
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../opencv-logo-small.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">OpenCV
   &#160;<span id="projectnumber">3.2.0</span>
   </div>
   <div id="projectbrief">Open Source Computer Vision</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<script type="text/javascript">
//<![CDATA[
function getLabelName(innerHTML) {
    var str = innerHTML.toLowerCase();
    // Replace all '+' with 'p'
    str = str.split('+').join('p');
    // Replace all ' ' with '_'
    str = str.split(' ').join('_');
    // Replace all '#' with 'sharp'
    str = str.split('#').join('sharp');
    // Replace other special characters with 'ascii' + code
    for (var i = 0; i < str.length; i++) {
        var charCode = str.charCodeAt(i);
        if (!(charCode == 95 || (charCode > 96 && charCode < 123) || (charCode > 47 && charCode < 58)))
            str = str.substr(0, i) + 'ascii' + charCode + str.substr(i + 1);
    }
    return str;
}
function addToggle() {
    var $getDiv = $('div.newInnerHTML').last();
    var buttonName = $getDiv.html();
    var label = getLabelName(buttonName.trim());
    $getDiv.attr("title", label);
    $getDiv.hide();
    $getDiv = $getDiv.next();
    $getDiv.attr("class", "toggleable_div label_" + label);
    $getDiv.hide();
}
//]]>
</script>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('../../',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="../../dir_60640eb5cfc1405987e36002b5ce80a8.html">cudev</a></li><li class="navelem"><a class="el" href="../../dir_5e3ad84e9513857e33c1810a62d5f357.html">include</a></li><li class="navelem"><a class="el" href="../../dir_f6f98549938be426cce8b87254e6c751.html">opencv2</a></li><li class="navelem"><a class="el" href="../../dir_066ec13e48df39ad4e5cab4241a496ac.html">cudev</a></li><li class="navelem"><a class="el" href="../../dir_0fab1fc04380165e5a8403ed40673945.html">warp</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">reduce.hpp File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="../../d7/d0e/cudev_2include_2opencv2_2cudev_2common_8hpp.html">../common.hpp</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="../../d3/d6f/tuple_8hpp.html">../util/tuple.hpp</a>&quot;</code><br />
<code>#include &quot;detail/reduce.hpp&quot;</code><br />
<code>#include &quot;detail/reduce_key_val.hpp&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:d2/d75/namespacecv"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d75/namespacecv.html">cv</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:df/d1d/namespacecv_1_1cudev"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d1d/namespacecv_1_1cudev.html">cv::cudev</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ab460a86ce2356a945df3010b58a97c08"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d65/cudev_2include_2opencv2_2cudev_2warp_2reduce_8hpp.html#ab460a86ce2356a945df3010b58a97c08">OPENCV_CUDEV_WARP_REDUCE_HPP</a></td></tr>
<tr class="separator:ab460a86ce2356a945df3010b58a97c08"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gada9ddc5dd0880d539295fca6c71b1a43"><td class="memTemplParams" colspan="2">template&lt;typename T0 &gt; </td></tr>
<tr class="memitem:gada9ddc5dd0880d539295fca6c71b1a43"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gada9ddc5dd0880d539295fca6c71b1a43">cv::cudev::smem_tuple</a> (T0 *t0)</td></tr>
<tr class="separator:gada9ddc5dd0880d539295fca6c71b1a43"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab8f5d4d674113e05e6e7634d0e4611d5"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 &gt; </td></tr>
<tr class="memitem:gab8f5d4d674113e05e6e7634d0e4611d5"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gab8f5d4d674113e05e6e7634d0e4611d5">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1)</td></tr>
<tr class="separator:gab8f5d4d674113e05e6e7634d0e4611d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga80a5947043131d608a3c093795baf5a2"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 &gt; </td></tr>
<tr class="memitem:ga80a5947043131d608a3c093795baf5a2"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga80a5947043131d608a3c093795baf5a2">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2)</td></tr>
<tr class="separator:ga80a5947043131d608a3c093795baf5a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8498c67667e736f8669853bc01cdc2bf"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 &gt; </td></tr>
<tr class="memitem:ga8498c67667e736f8669853bc01cdc2bf"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga8498c67667e736f8669853bc01cdc2bf">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3)</td></tr>
<tr class="separator:ga8498c67667e736f8669853bc01cdc2bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2fb9373e84cb0a13dd14cd4fa4aff4e1"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 &gt; </td></tr>
<tr class="memitem:ga2fb9373e84cb0a13dd14cd4fa4aff4e1"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga2fb9373e84cb0a13dd14cd4fa4aff4e1">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4)</td></tr>
<tr class="separator:ga2fb9373e84cb0a13dd14cd4fa4aff4e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaef4a5236e533195fafad8278b2c5e620"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 &gt; </td></tr>
<tr class="memitem:gaef4a5236e533195fafad8278b2c5e620"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 *, volatile T5 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gaef4a5236e533195fafad8278b2c5e620">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4, T5 *t5)</td></tr>
<tr class="separator:gaef4a5236e533195fafad8278b2c5e620"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4af9cdcf327bd26e3bf201366508978c"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 &gt; </td></tr>
<tr class="memitem:ga4af9cdcf327bd26e3bf201366508978c"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 *, volatile T5 *, volatile T6 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga4af9cdcf327bd26e3bf201366508978c">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4, T5 *t5, T6 *t6)</td></tr>
<tr class="separator:ga4af9cdcf327bd26e3bf201366508978c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad9438b5a9c4cf14df89be071081f959c"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 &gt; </td></tr>
<tr class="memitem:gad9438b5a9c4cf14df89be071081f959c"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 *, volatile T5 *, volatile T6 *, volatile T7 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gad9438b5a9c4cf14df89be071081f959c">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4, T5 *t5, T6 *t6, T7 *t7)</td></tr>
<tr class="separator:gad9438b5a9c4cf14df89be071081f959c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadae9554fedac7876dee14809422714bc"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 &gt; </td></tr>
<tr class="memitem:gadae9554fedac7876dee14809422714bc"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 *, volatile T5 *, volatile T6 *, volatile T7 *, volatile T8 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gadae9554fedac7876dee14809422714bc">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4, T5 *t5, T6 *t6, T7 *t7, T8 *t8)</td></tr>
<tr class="separator:gadae9554fedac7876dee14809422714bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaee998c9e69107c84770286d11ed10deb"><td class="memTemplParams" colspan="2">template&lt;typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 &gt; </td></tr>
<tr class="memitem:gaee998c9e69107c84770286d11ed10deb"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ tuple&lt; volatile T0 *, volatile T1 *, volatile T2 *, volatile T3 *, volatile T4 *, volatile T5 *, volatile T6 *, volatile T7 *, volatile T8 *, volatile T9 * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gaee998c9e69107c84770286d11ed10deb">cv::cudev::smem_tuple</a> (T0 *t0, T1 *t1, T2 *t2, T3 *t3, T4 *t4, T5 *t5, T6 *t6, T7 *t7, T8 *t8, T9 *t9)</td></tr>
<tr class="separator:gaee998c9e69107c84770286d11ed10deb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad05e1b53750e6693dcd4159a90e316e0"><td class="memTemplParams" colspan="2">template&lt;typename T , class Op &gt; </td></tr>
<tr class="memitem:gad05e1b53750e6693dcd4159a90e316e0"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gad05e1b53750e6693dcd4159a90e316e0">cv::cudev::warpReduce</a> (volatile T *smem, T &amp;val, <a class="el" href="../../d1/d1b/group__core__hal__interface.html#ga4f5fce8c1ef282264f9214809524d836">uint</a> tid, const Op &amp;op)</td></tr>
<tr class="separator:gad05e1b53750e6693dcd4159a90e316e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa2514037f3bd4a0a954ebb2b027b44e5"><td class="memTemplParams" colspan="2">template&lt;typename P0 , typename P1 , typename P2 , typename P3 , typename P4 , typename P5 , typename P6 , typename P7 , typename P8 , typename P9 , typename R0 , typename R1 , typename R2 , typename R3 , typename R4 , typename R5 , typename R6 , typename R7 , typename R8 , typename R9 , class Op0 , class Op1 , class Op2 , class Op3 , class Op4 , class Op5 , class Op6 , class Op7 , class Op8 , class Op9 &gt; </td></tr>
<tr class="memitem:gaa2514037f3bd4a0a954ebb2b027b44e5"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#gaa2514037f3bd4a0a954ebb2b027b44e5">cv::cudev::warpReduce</a> (const tuple&lt; P0, P1, P2, P3, P4, P5, P6, P7, P8, P9 &gt; &amp;smem, const tuple&lt; R0, R1, R2, R3, R4, R5, R6, R7, R8, R9 &gt; &amp;val, <a class="el" href="../../d1/d1b/group__core__hal__interface.html#ga4f5fce8c1ef282264f9214809524d836">uint</a> tid, const tuple&lt; Op0, Op1, Op2, Op3, Op4, Op5, Op6, Op7, Op8, Op9 &gt; &amp;op)</td></tr>
<tr class="separator:gaa2514037f3bd4a0a954ebb2b027b44e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga490aa92b4685941ab60de37f83714e4d"><td class="memTemplParams" colspan="2">template&lt;typename K , typename V , class Cmp &gt; </td></tr>
<tr class="memitem:ga490aa92b4685941ab60de37f83714e4d"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga490aa92b4685941ab60de37f83714e4d">cv::cudev::warpReduceKeyVal</a> (volatile K *skeys, K &amp;key, volatile V *svals, V &amp;val, <a class="el" href="../../d1/d1b/group__core__hal__interface.html#ga4f5fce8c1ef282264f9214809524d836">uint</a> tid, const Cmp &amp;cmp)</td></tr>
<tr class="separator:ga490aa92b4685941ab60de37f83714e4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga98526d37bca18910003ce173098369bf"><td class="memTemplParams" colspan="2">template&lt;typename K , typename VP0 , typename VP1 , typename VP2 , typename VP3 , typename VP4 , typename VP5 , typename VP6 , typename VP7 , typename VP8 , typename VP9 , typename VR0 , typename VR1 , typename VR2 , typename VR3 , typename VR4 , typename VR5 , typename VR6 , typename VR7 , typename VR8 , typename VR9 , class Cmp &gt; </td></tr>
<tr class="memitem:ga98526d37bca18910003ce173098369bf"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga98526d37bca18910003ce173098369bf">cv::cudev::warpReduceKeyVal</a> (volatile K *skeys, K &amp;key, const tuple&lt; VP0, VP1, VP2, VP3, VP4, VP5, VP6, VP7, VP8, VP9 &gt; &amp;svals, const tuple&lt; VR0, VR1, VR2, VR3, VR4, VR5, VR6, VR7, VR8, VR9 &gt; &amp;val, <a class="el" href="../../d1/d1b/group__core__hal__interface.html#ga4f5fce8c1ef282264f9214809524d836">uint</a> tid, const Cmp &amp;cmp)</td></tr>
<tr class="separator:ga98526d37bca18910003ce173098369bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8ab97e5a97c3dc361c1c7bef083a41b2"><td class="memTemplParams" colspan="2">template&lt;typename KP0 , typename KP1 , typename KP2 , typename KP3 , typename KP4 , typename KP5 , typename KP6 , typename KP7 , typename KP8 , typename KP9 , typename KR0 , typename KR1 , typename KR2 , typename KR3 , typename KR4 , typename KR5 , typename KR6 , typename KR7 , typename KR8 , typename KR9 , typename VP0 , typename VP1 , typename VP2 , typename VP3 , typename VP4 , typename VP5 , typename VP6 , typename VP7 , typename VP8 , typename VP9 , typename VR0 , typename VR1 , typename VR2 , typename VR3 , typename VR4 , typename VR5 , typename VR6 , typename VR7 , typename VR8 , typename VR9 , class Cmp0 , class Cmp1 , class Cmp2 , class Cmp3 , class Cmp4 , class Cmp5 , class Cmp6 , class Cmp7 , class Cmp8 , class Cmp9 &gt; </td></tr>
<tr class="memitem:ga8ab97e5a97c3dc361c1c7bef083a41b2"><td class="memTemplItemLeft" align="right" valign="top">__device__ __forceinline__ void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../df/dfc/group__cudev.html#ga8ab97e5a97c3dc361c1c7bef083a41b2">cv::cudev::warpReduceKeyVal</a> (const tuple&lt; KP0, KP1, KP2, KP3, KP4, KP5, KP6, KP7, KP8, KP9 &gt; &amp;skeys, const tuple&lt; KR0, KR1, KR2, KR3, KR4, KR5, KR6, KR7, KR8, KR9 &gt; &amp;key, const tuple&lt; VP0, VP1, VP2, VP3, VP4, VP5, VP6, VP7, VP8, VP9 &gt; &amp;svals, const tuple&lt; VR0, VR1, VR2, VR3, VR4, VR5, VR6, VR7, VR8, VR9 &gt; &amp;val, <a class="el" href="../../d1/d1b/group__core__hal__interface.html#ga4f5fce8c1ef282264f9214809524d836">uint</a> tid, const tuple&lt; Cmp0, Cmp1, Cmp2, Cmp3, Cmp4, Cmp5, Cmp6, Cmp7, Cmp8, Cmp9 &gt; &amp;cmp)</td></tr>
<tr class="separator:ga8ab97e5a97c3dc361c1c7bef083a41b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="ab460a86ce2356a945df3010b58a97c08"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab460a86ce2356a945df3010b58a97c08">&sect;&nbsp;</a></span>OPENCV_CUDEV_WARP_REDUCE_HPP</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define OPENCV_CUDEV_WARP_REDUCE_HPP</td>
        </tr>
      </table>
</div><div class="memdoc">

</div>
</div>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Dec 23 2016 13:00:23 for OpenCV by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
<script type="text/javascript">
//<![CDATA[
function addButton(label, buttonName) {
    var b = document.createElement("BUTTON");
    b.innerHTML = buttonName;
    b.setAttribute('class', 'toggleable_button label_' + label);
    b.onclick = function() {
        $('.toggleable_button').css({
            border: '2px outset',
            'border-radius': '4px'
        });
        $('.toggleable_button.label_' + label).css({
            border: '2px inset',
            'border-radius': '4px'
        });
        $('.toggleable_div').css('display', 'none');
        $('.toggleable_div.label_' + label).css('display', 'block');
    };
    b.style.border = '2px outset';
    b.style.borderRadius = '4px';
    b.style.margin = '2px';
    return b;
}
function buttonsToAdd($elements, $heading, $type) {
    if ($elements.length === 0) {
        $elements = $("" + $type + ":contains(" + $heading.html() + ")").parent().prev("div.newInnerHTML");
    }
    var arr = jQuery.makeArray($elements);
    var seen = {};
    arr.forEach(function(e) {
        var txt = e.innerHTML;
        if (!seen[txt]) {
            $button = addButton(e.title, txt);
            if (Object.keys(seen).length == 0) {
                var linebreak1 = document.createElement("br");
                var linebreak2 = document.createElement("br");
                ($heading).append(linebreak1);
                ($heading).append(linebreak2);
            }
            ($heading).append($button);
            seen[txt] = true;
        }
    });
    return;
}
$("h2").each(function() {
    $heading = $(this);
    $smallerHeadings = $(this).nextUntil("h2").filter("h3").add($(this).nextUntil("h2").find("h3"));
    if ($smallerHeadings.length) {
        $smallerHeadings.each(function() {
            var $elements = $(this).nextUntil("h3").filter("div.newInnerHTML");
            buttonsToAdd($elements, $(this), "h3");
        });
    } else {
        var $elements = $(this).nextUntil("h2").filter("div.newInnerHTML");
        buttonsToAdd($elements, $heading, "h2");
    }
});
$(".toggleable_button").first().click();
var $clickDefault = $('.toggleable_button.label_python').first();
if ($clickDefault.length) {
    $clickDefault.click();
}
$clickDefault = $('.toggleable_button.label_cpp').first();
if ($clickDefault.length) {
    $clickDefault.click();
}
//]]>
</script>
</body>
</html>
