<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.6" xml:lang="en-US">
  <compounddef id="namespacetf_1_1detail" kind="namespace" language="C++">
    <compoundname>tf::detail</compoundname>
    <innerclass refid="structtf_1_1detail_1_1cudaBlockReduce" prot="private">tf::detail::cudaBlockReduce</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaBlockScan" prot="private">tf::detail::cudaBlockScan</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaBlockSort" prot="private">tf::detail::cudaBlockSort</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaFindPair" prot="private">tf::detail::cudaFindPair</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaMergePair" prot="private">tf::detail::cudaMergePair</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaMergeRange" prot="private">tf::detail::cudaMergeRange</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaScanResult" prot="private">tf::detail::cudaScanResult</innerclass>
    <innerclass refid="structtf_1_1detail_1_1cudaScanResult_3_01T_00_01vt_00_01true_01_4" prot="private">tf::detail::cudaScanResult&lt; T, vt, true &gt;</innerclass>
      <sectiondef kind="enum">
      <memberdef kind="enum" id="scan_8hpp_1a1f08990983d8305f1592fee1a3fdc593" prot="private" static="no" strong="yes">
        <type>int</type>
        <name>cudaScanType</name>
        <qualifiedname>tf::detail::cudaScanType</qualifiedname>
        <enumvalue id="scan_8hpp_1a1f08990983d8305f1592fee1a3fdc593af45c3a0bb3687ed8e221253b3fd4a2ce" prot="private">
          <name>EXCLUSIVE</name>
          <initializer>= 1</initializer>
          <briefdescription>
          </briefdescription>
          <detaileddescription>
          </detaileddescription>
        </enumvalue>
        <enumvalue id="scan_8hpp_1a1f08990983d8305f1592fee1a3fdc593a572d795e2d044f895cc511e5c05030e5" prot="private">
          <name>INCLUSIVE</name>
          <briefdescription>
          </briefdescription>
          <detaileddescription>
          </detaileddescription>
        </enumvalue>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" line="20" column="1" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" bodystart="20" bodyend="23"/>
      </memberdef>
      <memberdef kind="enum" id="merge_8hpp_1a93988a64371309e28f815e1266b875f9" prot="private" static="no" strong="yes">
        <type></type>
        <name>cudaMergeBoundType</name>
        <qualifiedname>tf::detail::cudaMergeBoundType</qualifiedname>
        <enumvalue id="merge_8hpp_1a93988a64371309e28f815e1266b875f9aa7c48ba367e019d004bfb0239b85f2b3" prot="private">
          <name>LOWER</name>
          <briefdescription>
          </briefdescription>
          <detaileddescription>
          </detaileddescription>
        </enumvalue>
        <enumvalue id="merge_8hpp_1a93988a64371309e28f815e1266b875f9a9e43f5291e6fcb2ad99c8e3f91acd179" prot="private">
          <name>UPPER</name>
          <briefdescription>
          </briefdescription>
          <detaileddescription>
          </detaileddescription>
        </enumvalue>
        <briefdescription>
<para>merge bound type </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="16" column="1" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="16" bodyend="19"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="var">
      <memberdef kind="variable" id="scan_8hpp_1acb48d657669121bb9dfd45662e5bf9e1" prot="private" static="no" constexpr="yes" mutable="no">
        <type>constexpr unsigned</type>
        <definition>constexpr unsigned tf::detail::cudaScanRecursionThreshold</definition>
        <argsstring></argsstring>
        <name>cudaScanRecursionThreshold</name>
        <qualifiedname>tf::detail::cudaScanRecursionThreshold</qualifiedname>
        <initializer>= 8</initializer>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" line="17" column="27" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" bodystart="17" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="func">
      <memberdef kind="function" id="small__vector_8hpp_1af7219c0a48eb7108171068b23dd93c92" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>uint64_t</type>
        <definition>uint64_t tf::detail::NextCapacity</definition>
        <argsstring>(uint64_t A)</argsstring>
        <name>NextCapacity</name>
        <qualifiedname>tf::detail::NextCapacity</qualifiedname>
        <param>
          <type>uint64_t</type>
          <declname>A</declname>
        </param>
        <briefdescription>
<para>NextCapacity - Returns the next power of two (in 64-bits) that is strictly greater than A. Returns zero on overflow. this function assumes A to be positive. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/utility/small_vector.hpp" line="35" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/utility/small_vector.hpp" bodystart="35" bodyend="43"/>
      </memberdef>
      <memberdef kind="function" id="for__each_8hpp_1a25cd7b4ecddff9e32d577eba0f8455bb" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_for_each_kernel</definition>
        <argsstring>(I first, unsigned count, C c)</argsstring>
        <name>cuda_for_each_kernel</name>
        <qualifiedname>tf::detail::cuda_for_each_kernel</qualifiedname>
        <param>
          <type>I</type>
          <declname>first</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>C</type>
          <declname>c</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/for_each.hpp" line="18" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/for_each.hpp" bodystart="18" bodyend="28"/>
      </memberdef>
      <memberdef kind="function" id="for__each_8hpp_1aa5625b737f69747c9fe334fc91b9dcb2" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_for_each_index_kernel</definition>
        <argsstring>(I first, I inc, unsigned count, C c)</argsstring>
        <name>cuda_for_each_index_kernel</name>
        <qualifiedname>tf::detail::cuda_for_each_index_kernel</qualifiedname>
        <param>
          <type>I</type>
          <declname>first</declname>
        </param>
        <param>
          <type>I</type>
          <declname>inc</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>C</type>
          <declname>c</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/for_each.hpp" line="32" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/for_each.hpp" bodystart="32" bodyend="42"/>
      </memberdef>
      <memberdef kind="function" id="transform_8hpp_1ac3c389313dfd125f579cd879bacb5b81" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_transform_kernel</definition>
        <argsstring>(I first, unsigned count, O output, C op)</argsstring>
        <name>cuda_transform_kernel</name>
        <qualifiedname>tf::detail::cuda_transform_kernel</qualifiedname>
        <param>
          <type>I</type>
          <declname>first</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>O</type>
          <declname>output</declname>
        </param>
        <param>
          <type>C</type>
          <declname>op</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/transform.hpp" line="22" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/transform.hpp" bodystart="22" bodyend="34"/>
      </memberdef>
      <memberdef kind="function" id="transform_8hpp_1a9b628fdc2171542fc80538207da90f76" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I1</type>
          </param>
          <param>
            <type>typename I2</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_transform_kernel</definition>
        <argsstring>(I1 first1, I2 first2, unsigned count, O output, C op)</argsstring>
        <name>cuda_transform_kernel</name>
        <qualifiedname>tf::detail::cuda_transform_kernel</qualifiedname>
        <param>
          <type>I1</type>
          <declname>first1</declname>
        </param>
        <param>
          <type>I2</type>
          <declname>first2</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>O</type>
          <declname>output</declname>
        </param>
        <param>
          <type>C</type>
          <declname>op</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/transform.hpp" line="40" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/transform.hpp" bodystart="40" bodyend="54"/>
      </memberdef>
      <memberdef kind="function" id="reduce_8hpp_1a9b9598d1760f0473831ba440e2334fc3" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_reduce_kernel</definition>
        <argsstring>(I input, unsigned count, T *res, O op, void *ptr)</argsstring>
        <name>cuda_reduce_kernel</name>
        <qualifiedname>tf::detail::cuda_reduce_kernel</qualifiedname>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>T *</type>
          <declname>res</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" line="93" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" bodystart="93" bodyend="122"/>
      </memberdef>
      <memberdef kind="function" id="reduce_8hpp_1ab2081cd1728759054a34c21a16453db6" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_reduce_loop</definition>
        <argsstring>(P &amp;&amp;p, I input, unsigned count, T *res, O op, void *ptr)</argsstring>
        <name>cuda_reduce_loop</name>
        <qualifiedname>tf::detail::cuda_reduce_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>T *</type>
          <declname>res</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" line="126" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" bodystart="126" bodyend="143"/>
      </memberdef>
      <memberdef kind="function" id="reduce_8hpp_1a7f47a6f1da83330ac06a00b85a88c556" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>size_t</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>size_t</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>__global__ void</type>
        <definition>__global__ void tf::detail::cuda_uninitialized_reduce_kernel</definition>
        <argsstring>(I input, unsigned count, T *res, O op, void *ptr)</argsstring>
        <name>cuda_uninitialized_reduce_kernel</name>
        <qualifiedname>tf::detail::cuda_uninitialized_reduce_kernel</qualifiedname>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>T *</type>
          <declname>res</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" line="153" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" bodystart="153" bodyend="183"/>
      </memberdef>
      <memberdef kind="function" id="reduce_8hpp_1a6694b88dc343d87df2104809002583cc" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_uninitialized_reduce_loop</definition>
        <argsstring>(P &amp;&amp;p, I input, unsigned count, T *res, O op, void *ptr)</argsstring>
        <name>cuda_uninitialized_reduce_loop</name>
        <qualifiedname>tf::detail::cuda_uninitialized_reduce_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>T *</type>
          <declname>res</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" line="189" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/reduce.hpp" bodystart="189" bodyend="206"/>
      </memberdef>
      <memberdef kind="function" id="scan_8hpp_1a2c9669b414231e12f66e9d40ca9ae3a3" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_single_pass_scan</definition>
        <argsstring>(P &amp;&amp;p, cudaScanType scan_type, I input, unsigned count, O output, C op)</argsstring>
        <name>cuda_single_pass_scan</name>
        <qualifiedname>tf::detail::cuda_single_pass_scan</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>cudaScanType</type>
          <declname>scan_type</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>O</type>
          <declname>output</declname>
        </param>
        <param>
          <type>C</type>
          <declname>op</declname>
        </param>
        <briefdescription>
<para>single-pass scan for small input </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" line="176" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" bodystart="176" bodyend="222"/>
      </memberdef>
      <memberdef kind="function" id="scan_8hpp_1a10be6941d3e42a5583d07a092a7b083d" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_scan_loop</definition>
        <argsstring>(P &amp;&amp;p, cudaScanType scan_type, I input, unsigned count, O output, C op, void *ptr)</argsstring>
        <name>cuda_scan_loop</name>
        <qualifiedname>tf::detail::cuda_scan_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>cudaScanType</type>
          <declname>scan_type</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>O</type>
          <declname>output</declname>
        </param>
        <param>
          <type>C</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
<para>main scan loop </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" line="230" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/scan.hpp" bodystart="230" bodyend="321"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1ae9d3db5c9457ebec7cbdd3a3d8c65e94" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
            <defval>cudaMergeBoundType::LOWER</defval>
          </param>
          <param>
            <type>typename a_keys_it</type>
          </param>
          <param>
            <type>typename b_keys_it</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_merge_path</definition>
        <argsstring>(a_keys_it a_keys, unsigned a_count, b_keys_it b_keys, unsigned b_count, unsigned diag, comp_t comp)</argsstring>
        <name>cuda_merge_path</name>
        <qualifiedname>tf::detail::cuda_merge_path</qualifiedname>
        <param>
          <type>a_keys_it</type>
          <declname>a_keys</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_keys_it</type>
          <declname>b_keys</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>diag</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="77" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="77" bodyend="98"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1afc818e3bceee479b5dc1af7f0e6da282" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
          </param>
          <param>
            <type>typename keys_it</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_merge_path</definition>
        <argsstring>(keys_it keys, cudaMergeRange range, unsigned diag, comp_t comp)</argsstring>
        <name>cuda_merge_path</name>
        <qualifiedname>tf::detail::cuda_merge_path</qualifiedname>
        <param>
          <type>keys_it</type>
          <declname>keys</declname>
        </param>
        <param>
          <type>cudaMergeRange</type>
          <declname>range</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>diag</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="102" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="102" bodyend="110"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1ae27cfa73d1f4b90114cd513e98c56d62" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
          </param>
          <param>
            <type>bool</type>
            <declname>range_check</declname>
            <defname>range_check</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>__device__ bool</type>
        <definition>__device__ bool tf::detail::cuda_merge_predicate</definition>
        <argsstring>(T a_key, T b_key, cudaMergeRange range, comp_t comp)</argsstring>
        <name>cuda_merge_predicate</name>
        <qualifiedname>tf::detail::cuda_merge_predicate</qualifiedname>
        <param>
          <type>T</type>
          <declname>a_key</declname>
        </param>
        <param>
          <type>T</type>
          <declname>b_key</declname>
        </param>
        <param>
          <type>cudaMergeRange</type>
          <declname>range</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="114" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="114" bodyend="130"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a9c104811415e59c6f7116eb2553d656e" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_compute_merge_range</definition>
        <argsstring>(unsigned a_count, unsigned b_count, unsigned partition, unsigned spacing, unsigned mp0, unsigned mp1)</argsstring>
        <name>cuda_compute_merge_range</name>
        <qualifiedname>tf::detail::cuda_compute_merge_range</qualifiedname>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>partition</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>mp0</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>mp1</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="133" column="24" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="133" bodyend="143"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a433a26ef6a2aa8e1d737fea93a42ecf4" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_load_two_streams_reg</definition>
        <argsstring>(const T *a, unsigned a_count, const T *b, unsigned b_count, unsigned tid)</argsstring>
        <name>cuda_load_two_streams_reg</name>
        <qualifiedname>tf::detail::cuda_load_two_streams_reg</qualifiedname>
        <param>
          <type>const T *</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>const T *</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
<para>Specialization that emits just one LD instruction. Can only reliably used with raw pointer types. Fixed not to use pointer arithmetic so that we don&apos;t get undefined behaviors with unaligned types. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="153" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="153" bodyend="165"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a8fa1132a3f73ee6b210bcb10fe02d089" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename a_it</type>
          </param>
          <param>
            <type>typename b_it</type>
          </param>
        </templateparamlist>
        <type>__device__ std::enable_if_t&lt; !(<ref refid="cpp/types/is_pointer" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::is_pointer</ref>&lt; a_it &gt;::value &amp;&amp;<ref refid="cpp/types/is_pointer" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::is_pointer</ref>&lt; b_it &gt;::value), cudaArray&lt; T, vt &gt; &gt;</type>
        <definition>__device__ std::enable_if_t&lt; !(std::is_pointer&lt; a_it &gt;::value &amp;&amp;std::is_pointer&lt; b_it &gt;::value), cudaArray&lt; T, vt &gt; &gt; tf::detail::load_two_streams_reg</definition>
        <argsstring>(a_it a, unsigned a_count, b_it b, unsigned b_count, unsigned tid)</argsstring>
        <name>load_two_streams_reg</name>
        <qualifiedname>tf::detail::load_two_streams_reg</qualifiedname>
        <param>
          <type>a_it</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_it</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="173" column="2" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="173" bodyend="180"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a6da5d76af53a630241f6aade1bf76969" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename A</type>
          </param>
          <param>
            <type>typename B</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>unsigned</type>
            <declname>S</declname>
            <defname>S</defname>
          </param>
        </templateparamlist>
        <type>__device__ void</type>
        <definition>__device__ void tf::detail::cuda_load_two_streams_shared</definition>
        <argsstring>(A a, unsigned a_count, B b, unsigned b_count, unsigned tid, T(&amp;shared)[S], bool sync=true)</argsstring>
        <name>cuda_load_two_streams_shared</name>
        <qualifiedname>tf::detail::cuda_load_two_streams_shared</qualifiedname>
        <param>
          <type>A</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>B</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <param>
          <type>T(&amp;)</type>
          <declname>shared</declname>
          <array>[S]</array>
        </param>
        <param>
          <type>bool</type>
          <declname>sync</declname>
          <defval>true</defval>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="184" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="184" bodyend="190"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1afefa562dcaa4b71ace44ee6b4be764d6" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_gather_two_streams_strided</definition>
        <argsstring>(const T *a, unsigned a_count, const T *b, unsigned b_count, cudaArray&lt; unsigned, vt &gt; indices, unsigned tid)</argsstring>
        <name>cuda_gather_two_streams_strided</name>
        <qualifiedname>tf::detail::cuda_gather_two_streams_strided</qualifiedname>
        <param>
          <type>const T *</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>const T *</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>cudaArray&lt; unsigned, vt &gt;</type>
          <declname>indices</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="194" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="194" bodyend="209"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a21edc86d1a588e56eb60e1de33aa32aa" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename a_it</type>
          </param>
          <param>
            <type>typename b_it</type>
          </param>
        </templateparamlist>
        <type>__device__ std::enable_if_t&lt; !(<ref refid="cpp/types/is_pointer" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::is_pointer</ref>&lt; a_it &gt;::value &amp;&amp;<ref refid="cpp/types/is_pointer" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::is_pointer</ref>&lt; b_it &gt;::value), cudaArray&lt; T, vt &gt; &gt;</type>
        <definition>__device__ std::enable_if_t&lt; !(std::is_pointer&lt; a_it &gt;::value &amp;&amp;std::is_pointer&lt; b_it &gt;::value), cudaArray&lt; T, vt &gt; &gt; tf::detail::cuda_gather_two_streams_strided</definition>
        <argsstring>(a_it a, unsigned a_count, b_it b, unsigned b_count, cudaArray&lt; unsigned, vt &gt; indices, unsigned tid)</argsstring>
        <name>cuda_gather_two_streams_strided</name>
        <qualifiedname>tf::detail::cuda_gather_two_streams_strided</qualifiedname>
        <param>
          <type>a_it</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_it</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>cudaArray&lt; unsigned, vt &gt;</type>
          <declname>indices</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="217" column="2" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="217" bodyend="227"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1ac4e1e83b946b3ef78e5dcb3e9bfc3c48" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename a_it</type>
          </param>
          <param>
            <type>typename b_it</type>
          </param>
          <param>
            <type>typename c_it</type>
          </param>
        </templateparamlist>
        <type>__device__ void</type>
        <definition>__device__ void tf::detail::cuda_transfer_two_streams_strided</definition>
        <argsstring>(a_it a, unsigned a_count, b_it b, unsigned b_count, cudaArray&lt; unsigned, vt &gt; indices, unsigned tid, c_it c)</argsstring>
        <name>cuda_transfer_two_streams_strided</name>
        <qualifiedname>tf::detail::cuda_transfer_two_streams_strided</qualifiedname>
        <param>
          <type>a_it</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_it</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>cudaArray&lt; unsigned, vt &gt;</type>
          <declname>indices</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <param>
          <type>c_it</type>
          <declname>c</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="231" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="231" bodyend="242"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a9d4d00a3dbc0158eac24e4603548bdbd" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_serial_merge</definition>
        <argsstring>(const T *keys_shared, cudaMergeRange range, comp_t comp, bool sync=true)</argsstring>
        <name>cuda_serial_merge</name>
        <qualifiedname>tf::detail::cuda_serial_merge</qualifiedname>
        <param>
          <type>const T *</type>
          <declname>keys_shared</declname>
        </param>
        <param>
          <type>cudaMergeRange</type>
          <declname>range</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>bool</type>
          <declname>sync</declname>
          <defval>true</defval>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
<para>This function must be able to dereference keys[a_begin] and keys[b_begin], no matter the indices for each. The caller should allocate at least nt * vt + 1 elements for </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="253" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="253" bodyend="275"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a79b4c5f2bace6ae958abd8573e00a849" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>nt</declname>
            <defname>nt</defname>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename a_it</type>
          </param>
          <param>
            <type>typename b_it</type>
          </param>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
          <param>
            <type>unsigned</type>
            <declname>S</declname>
            <defname>S</defname>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::block_merge_from_mem</definition>
        <argsstring>(a_it a, b_it b, cudaMergeRange range_mem, unsigned tid, comp_t comp, T(&amp;keys_shared)[S])</argsstring>
        <name>block_merge_from_mem</name>
        <qualifiedname>tf::detail::block_merge_from_mem</qualifiedname>
        <param>
          <type>a_it</type>
          <declname>a</declname>
        </param>
        <param>
          <type>b_it</type>
          <declname>b</declname>
        </param>
        <param>
          <type>cudaMergeRange</type>
          <declname>range_mem</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>tid</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>T(&amp;)</type>
          <declname>keys_shared</declname>
          <array>[S]</array>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
<para>Load arrays a and b from global memory and merge unsignedo register. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="286" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="286" bodyend="314"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a9a1b1d78a16e27a208e90d75d4885f05" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>cudaMergeBoundType</type>
            <declname>bounds</declname>
            <defname>bounds</defname>
          </param>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename a_keys_it</type>
          </param>
          <param>
            <type>typename b_keys_it</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_merge_path_partitions</definition>
        <argsstring>(P &amp;&amp;p, a_keys_it a, unsigned a_count, b_keys_it b, unsigned b_count, unsigned spacing, comp_t comp, unsigned *buf)</argsstring>
        <name>cuda_merge_path_partitions</name>
        <qualifiedname>tf::detail::cuda_merge_path_partitions</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>a_keys_it</type>
          <declname>a</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_keys_it</type>
          <declname>b</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>unsigned *</type>
          <declname>buf</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="320" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="320" bodyend="347"/>
      </memberdef>
      <memberdef kind="function" id="merge_8hpp_1a9a1d50803593cc703ed79f2baf9cfa78" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename a_keys_it</type>
          </param>
          <param>
            <type>typename a_vals_it</type>
          </param>
          <param>
            <type>typename b_keys_it</type>
          </param>
          <param>
            <type>typename b_vals_it</type>
          </param>
          <param>
            <type>typename c_keys_it</type>
          </param>
          <param>
            <type>typename c_vals_it</type>
          </param>
          <param>
            <type>typename comp_t</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_merge_loop</definition>
        <argsstring>(P &amp;&amp;p, a_keys_it a_keys, a_vals_it a_vals, unsigned a_count, b_keys_it b_keys, b_vals_it b_vals, unsigned b_count, c_keys_it c_keys, c_vals_it c_vals, comp_t comp, void *ptr)</argsstring>
        <name>cuda_merge_loop</name>
        <qualifiedname>tf::detail::cuda_merge_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>a_keys_it</type>
          <declname>a_keys</declname>
        </param>
        <param>
          <type>a_vals_it</type>
          <declname>a_vals</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>a_count</declname>
        </param>
        <param>
          <type>b_keys_it</type>
          <declname>b_keys</declname>
        </param>
        <param>
          <type>b_vals_it</type>
          <declname>b_vals</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>b_count</declname>
        </param>
        <param>
          <type>c_keys_it</type>
          <declname>c_keys</declname>
        </param>
        <param>
          <type>c_vals_it</type>
          <declname>c_vals</declname>
        </param>
        <param>
          <type>comp_t</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" line="381" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/merge.hpp" bodystart="381" bodyend="440"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a95a5212f3d79eb1bba3ca3f8e373ae16" prot="private" static="no" constexpr="yes" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>constexpr int</type>
        <definition>constexpr int tf::detail::cuda_clz</definition>
        <argsstring>(int x)</argsstring>
        <name>cuda_clz</name>
        <qualifiedname>tf::detail::cuda_clz</qualifiedname>
        <param>
          <type>int</type>
          <declname>x</declname>
        </param>
        <briefdescription>
<para>counts the number of leading zeros starting from the most significant bit </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="20" column="15" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="20" bodyend="27"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a9a76c046987683e12f4a4381d1559a69" prot="private" static="no" constexpr="yes" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>constexpr int</type>
        <definition>constexpr int tf::detail::cuda_find_log2</definition>
        <argsstring>(int x, bool round_up=false)</argsstring>
        <name>cuda_find_log2</name>
        <qualifiedname>tf::detail::cuda_find_log2</qualifiedname>
        <param>
          <type>int</type>
          <declname>x</declname>
        </param>
        <param>
          <type>bool</type>
          <declname>round_up</declname>
          <defval>false</defval>
        </param>
        <briefdescription>
<para>finds log2(x) and optionally round up to the next integer logarithm. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="33" column="15" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="33" bodyend="39"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a899f77e74e47867dac8c4eb08b92577e" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename T</type>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_odd_even_sort</definition>
        <argsstring>(cudaArray&lt; T, vt &gt; x, C comp, int flags=0)</argsstring>
        <name>cuda_odd_even_sort</name>
        <qualifiedname>tf::detail::cuda_odd_even_sort</qualifiedname>
        <param>
          <type>cudaArray&lt; T, vt &gt;</type>
          <declname>x</declname>
        </param>
        <param>
          <type>C</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>int</type>
          <declname>flags</declname>
          <defval>0</defval>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="43" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="43" bodyend="54"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1ad452d61656e6301ef16e8241f05c8918" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename K</type>
          </param>
          <param>
            <type>typename V</type>
          </param>
          <param>
            <type>unsigned</type>
            <declname>vt</declname>
            <defname>vt</defname>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_odd_even_sort</definition>
        <argsstring>(cudaKVArray&lt; K, V, vt &gt; x, C comp, int flags=0)</argsstring>
        <name>cuda_odd_even_sort</name>
        <qualifiedname>tf::detail::cuda_odd_even_sort</qualifiedname>
        <param>
          <type>cudaKVArray&lt; K, V, vt &gt;</type>
          <declname>x</declname>
        </param>
        <param>
          <type>C</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>int</type>
          <declname>flags</declname>
          <defval>0</defval>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="58" column="17" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="58" bodyend="71"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a2b01469cc11053017b1cfea2a6409057" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>__device__ int</type>
        <definition>__device__ int tf::detail::cuda_out_of_range_flags</definition>
        <argsstring>(int first, int vt, int count)</argsstring>
        <name>cuda_out_of_range_flags</name>
        <qualifiedname>tf::detail::cuda_out_of_range_flags</qualifiedname>
        <param>
          <type>int</type>
          <declname>first</declname>
        </param>
        <param>
          <type>int</type>
          <declname>vt</declname>
        </param>
        <param>
          <type>int</type>
          <declname>count</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="78" column="23" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="78" bodyend="86"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1af2d7d0e939a7d1a07ced94221a24683c" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_compute_merge_sort_frame</definition>
        <argsstring>(unsigned partition, unsigned coop, unsigned spacing)</argsstring>
        <name>cuda_compute_merge_sort_frame</name>
        <qualifiedname>tf::detail::cuda_compute_merge_sort_frame</qualifiedname>
        <param>
          <type>unsigned</type>
          <declname>partition</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>coop</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="89" column="24" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="89" bodyend="104"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a1a8d810065126154d47114e93bbfea57" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_compute_merge_sort_range</definition>
        <argsstring>(unsigned count, unsigned partition, unsigned coop, unsigned spacing)</argsstring>
        <name>cuda_compute_merge_sort_range</name>
        <qualifiedname>tf::detail::cuda_compute_merge_sort_range</qualifiedname>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>partition</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>coop</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="107" column="24" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="107" bodyend="119"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a4705874f6abf58283ecae02f60cdf8d2" prot="private" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>__device__ auto</type>
        <definition>__device__ auto tf::detail::cuda_compute_merge_sort_range</definition>
        <argsstring>(unsigned count, unsigned partition, unsigned coop, unsigned spacing, unsigned mp0, unsigned mp1)</argsstring>
        <name>cuda_compute_merge_sort_range</name>
        <qualifiedname>tf::detail::cuda_compute_merge_sort_range</qualifiedname>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>partition</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>coop</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>mp0</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>mp1</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="122" column="24" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="122" bodyend="146"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1ab4d357fb63d82334ea784ee72beaf600" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename K</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_merge_sort_partitions</definition>
        <argsstring>(P &amp;&amp;p, K keys, unsigned count, unsigned coop, unsigned spacing, C comp, unsigned *buf)</argsstring>
        <name>cuda_merge_sort_partitions</name>
        <qualifiedname>tf::detail::cuda_merge_sort_partitions</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>K</type>
          <declname>keys</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>coop</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>spacing</declname>
        </param>
        <param>
          <type>C</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>unsigned *</type>
          <declname>buf</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="224" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="224" bodyend="251"/>
      </memberdef>
      <memberdef kind="function" id="sort_8hpp_1a1d70c013b280d4f811275e892af15c18" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename K_it</type>
          </param>
          <param>
            <type>typename V_it</type>
          </param>
          <param>
            <type>typename C</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::merge_sort_loop</definition>
        <argsstring>(P &amp;&amp;p, K_it keys_input, V_it vals_input, unsigned count, C comp, void *buf)</argsstring>
        <name>merge_sort_loop</name>
        <qualifiedname>tf::detail::merge_sort_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>K_it</type>
          <declname>keys_input</declname>
        </param>
        <param>
          <type>V_it</type>
          <declname>vals_input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>C</type>
          <declname>comp</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>buf</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" line="255" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/sort.hpp" bodystart="255" bodyend="397"/>
      </memberdef>
      <memberdef kind="function" id="find_8hpp_1a3941b09790867beb42f502c08e08b908" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename U</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_find_if_loop</definition>
        <argsstring>(P &amp;&amp;p, I input, unsigned count, unsigned *idx, U pred)</argsstring>
        <name>cuda_find_if_loop</name>
        <qualifiedname>tf::detail::cuda_find_if_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned *</type>
          <declname>idx</declname>
        </param>
        <param>
          <type>U</type>
          <declname>pred</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" line="25" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" bodystart="25" bodyend="90"/>
      </memberdef>
      <memberdef kind="function" id="find_8hpp_1a72820903215a409e1e3d47a073579918" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_min_element_loop</definition>
        <argsstring>(P &amp;&amp;p, I input, unsigned count, unsigned *idx, O op, void *ptr)</argsstring>
        <name>cuda_min_element_loop</name>
        <qualifiedname>tf::detail::cuda_min_element_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned *</type>
          <declname>idx</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" line="94" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" bodystart="94" bodyend="116"/>
      </memberdef>
      <memberdef kind="function" id="find_8hpp_1a442fbc4beb897580a46164147d7db2c9" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename P</type>
          </param>
          <param>
            <type>typename I</type>
          </param>
          <param>
            <type>typename O</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::detail::cuda_max_element_loop</definition>
        <argsstring>(P &amp;&amp;p, I input, unsigned count, unsigned *idx, O op, void *ptr)</argsstring>
        <name>cuda_max_element_loop</name>
        <qualifiedname>tf::detail::cuda_max_element_loop</qualifiedname>
        <param>
          <type>P &amp;&amp;</type>
          <declname>p</declname>
        </param>
        <param>
          <type>I</type>
          <declname>input</declname>
        </param>
        <param>
          <type>unsigned</type>
          <declname>count</declname>
        </param>
        <param>
          <type>unsigned *</type>
          <declname>idx</declname>
        </param>
        <param>
          <type>O</type>
          <declname>op</declname>
        </param>
        <param>
          <type>void *</type>
          <declname>ptr</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" line="120" column="6" bodyfile="/Users/twhuang/Code/taskflow/taskflow/cuda/algorithm/find.hpp" bodystart="120" bodyend="142"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <location file="/Users/twhuang/Code/taskflow/taskflow/utility/small_vector.hpp" line="27" column="12"/>
  </compounddef>
</doxygen>
