| |
| |
| <!DOCTYPE html> |
| <html class="writer-html5" lang="en" data-content_root="../"> |
| <head> |
| <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>ITT API C++ Wrapper — ITT/JIT APIs Documentation documentation</title> |
| <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" /> |
| <link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" /> |
| |
| |
| <link rel="canonical" href="https://intel.github.io/ittapi/src/itt-api-cpp-wrapper.html" /> |
| <script src="../_static/jquery.js?v=5d32c60e"></script> |
| <script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script> |
| <script src="../_static/documentation_options.js?v=5929fcd5"></script> |
| <script src="../_static/doctools.js?v=fd6eb6e6"></script> |
| <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script> |
| <script src="../_static/js/theme.js"></script> |
| <link rel="index" title="Index" href="../genindex.html" /> |
| <link rel="search" title="Search" href="../search.html" /> |
| <link rel="next" title="ITT API Reference Collector" href="ref_collector.html" /> |
| <link rel="prev" title="iJIT GetNewMethodID" href="jitapi/ijit_-getnewmethodid.html" /> |
| </head> |
| |
| <body class="wy-body-for-nav"> |
| <div class="wy-grid-for-nav"> |
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
| <div class="wy-side-scroll"> |
| <div class="wy-side-nav-search" > |
| |
| |
| |
| <a href="../index.html" class="icon icon-home"> |
| ITT/JIT APIs Documentation |
| </a> |
| <div role="search"> |
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> |
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> |
| <input type="hidden" name="check_keywords" value="yes" /> |
| <input type="hidden" name="area" value="default" /> |
| </form> |
| </div> |
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> |
| <p class="caption" role="heading"><span class="caption-text">Contents:</span></p> |
| <ul class="current"> |
| <li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="build.html">Build from Source Code</a></li> |
| <li class="toctree-l1 current"><a class="reference internal" href="api-support.html">Use the ITT/JIT APIs</a><ul class="current"> |
| <li class="toctree-l2"><a class="reference internal" href="api-support.html#c-c-api-usage-and-reference">C/C++ API Usage and Reference:</a></li> |
| <li class="toctree-l2 current"><a class="reference internal" href="api-support.html#other-language-api-bindings">Other Language API Bindings:</a><ul class="current"> |
| <li class="toctree-l3 current"><a class="current reference internal" href="#">ITT API C++ Wrapper</a><ul> |
| <li class="toctree-l4"><a class="reference internal" href="#supported-apis">Supported APIs</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#requirements">Requirements</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#including-the-wrapper">Including the Wrapper</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#example-task-instrumentation">Example: Task Instrumentation</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#linking">Linking</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#building-with-cmake">Building with CMake</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#running-tests">Running Tests</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#performance-tips">Performance Tips</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#api-reference">API Reference</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l3"><a class="reference external" href="https://docs.rs/ittapi/latest/ittapi">Rust ITT API Bindings</a></li> |
| <li class="toctree-l3"><a class="reference external" href="https://pypi.org/project/ittapi">Python ITT API Bindings</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="ref_collector.html">ITT API Reference Collector</a></li> |
| <li class="toctree-l1"><a class="reference external" href="https://github.com/intel/ittapi">GitHub Project</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| </nav> |
| |
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
| <a href="../index.html">ITT/JIT APIs Documentation</a> |
| </nav> |
| |
| <div class="wy-nav-content"> |
| <div class="rst-content style-external-links"> |
| <div role="navigation" aria-label="Page navigation"> |
| <ul class="wy-breadcrumbs"> |
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> |
| <li class="breadcrumb-item"><a href="api-support.html">Use the ITT/JIT APIs</a></li> |
| <li class="breadcrumb-item active">ITT API C++ Wrapper</li> |
| <li class="wy-breadcrumbs-aside"> |
| <a href="../_sources/src/itt-api-cpp-wrapper.rst.txt" rel="nofollow"> View page source</a> |
| </li> |
| </ul> |
| <hr/> |
| </div> |
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
| <div itemprop="articleBody"> |
| |
| <section id="itt-api-c-wrapper"> |
| <span id="itt-api-cpp-wrapper"></span><h1>ITT API C++ Wrapper<a class="headerlink" href="#itt-api-c-wrapper" title="Link to this heading"></a></h1> |
| <p>A modern, header-only C++ wrapper for the <a class="reference external" href="https://github.com/intel/ittapi">ITT API</a> |
| instrumentation library. The wrapper provides RAII-based scoped helpers and type-safe |
| C++ abstractions over the existing C API.</p> |
| <section id="supported-apis"> |
| <h2>Supported APIs<a class="headerlink" href="#supported-apis" title="Link to this heading"></a></h2> |
| <table class="docutils align-default"> |
| <colgroup> |
| <col style="width: 30.0%" /> |
| <col style="width: 70.0%" /> |
| </colgroup> |
| <thead> |
| <tr class="row-odd"><th class="head"><p>API</p></th> |
| <th class="head"><p>C++ Wrapper</p></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr class="row-even"><td><p>String Handle</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::StringHandle</span></code></p></td> |
| </tr> |
| <tr class="row-odd"><td><p>Domain</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::Domain</span></code></p></td> |
| </tr> |
| <tr class="row-even"><td><p>Task</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::ScopedTask</span></code>, <code class="docutils literal notranslate"><span class="pre">Domain::task_begin()</span></code> / <code class="docutils literal notranslate"><span class="pre">Domain::task_end()</span></code></p></td> |
| </tr> |
| <tr class="row-odd"><td><p>Region</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::ScopedRegion</span></code></p></td> |
| </tr> |
| <tr class="row-even"><td><p>Frame</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::ScopedFrame</span></code></p></td> |
| </tr> |
| <tr class="row-odd"><td><p>Collection Control</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::pause()</span></code>, <code class="docutils literal notranslate"><span class="pre">ittapi::resume()</span></code>, <code class="docutils literal notranslate"><span class="pre">ittapi::ScopedPause</span></code></p></td> |
| </tr> |
| <tr class="row-even"><td><p>Thread Naming</p></td> |
| <td><p><code class="docutils literal notranslate"><span class="pre">ittapi::set_thread_name()</span></code></p></td> |
| </tr> |
| </tbody> |
| </table> |
| </section> |
| <section id="requirements"> |
| <h2>Requirements<a class="headerlink" href="#requirements" title="Link to this heading"></a></h2> |
| <ul class="simple"> |
| <li><p>C++17 or later</p></li> |
| <li><p>The existing <code class="docutils literal notranslate"><span class="pre">ittnotify</span></code> static C-library</p></li> |
| </ul> |
| </section> |
| <section id="including-the-wrapper"> |
| <h2>Including the Wrapper<a class="headerlink" href="#including-the-wrapper" title="Link to this heading"></a></h2> |
| <p>Use the umbrella header to get the full API:</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ittapi.hpp></span> |
| </pre></div> |
| </div> |
| <p>Or include individual headers:</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ittapi_domain.hpp></span> |
| <span class="cp">#include</span><span class="w"> </span><span class="cpf"><ittapi_task.hpp></span> |
| <span class="cp">#include</span><span class="w"> </span><span class="cpf"><ittapi_collection_control.hpp></span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="example-task-instrumentation"> |
| <h2>Example: Task Instrumentation<a class="headerlink" href="#example-task-instrumentation" title="Link to this heading"></a></h2> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ittapi.hpp></span> |
| |
| <span class="cp">#include</span><span class="w"> </span><span class="cpf"><chrono></span> |
| <span class="cp">#include</span><span class="w"> </span><span class="cpf"><thread></span> |
| |
| <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">set_thread_name</span><span class="p">(</span><span class="s">"main"</span><span class="p">);</span> |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">Domain</span><span class="w"> </span><span class="n">domain</span><span class="p">{</span><span class="s">"example.task"</span><span class="p">};</span> |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">StringHandle</span><span class="w"> </span><span class="n">task_name</span><span class="p">{</span><span class="s">"process"</span><span class="p">};</span> |
| |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">pause</span><span class="p">();</span> |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">resume</span><span class="p">();</span> |
| |
| <span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="n">task_name</span><span class="p">);</span> |
| <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">this_thread</span><span class="o">::</span><span class="n">sleep_for</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="p">(</span><span class="mi">10</span><span class="p">));</span> |
| <span class="w"> </span><span class="p">}</span> |
| |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="linking"> |
| <h2>Linking<a class="headerlink" href="#linking" title="Link to this heading"></a></h2> |
| <section id="cmake-consumer"> |
| <h3>CMake Consumer<a class="headerlink" href="#cmake-consumer" title="Link to this heading"></a></h3> |
| <div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nb">find_package</span><span class="p">(</span><span class="s">ittapi</span><span class="w"> </span><span class="s">CONFIG</span><span class="w"> </span><span class="s">REQUIRED</span><span class="p">)</span> |
| <span class="nb">target_link_libraries</span><span class="p">(</span><span class="s">my_app</span><span class="w"> </span><span class="s">PRIVATE</span><span class="w"> </span><span class="s">ittapi::cxx</span><span class="p">)</span> |
| </pre></div> |
| </div> |
| <p>The <code class="docutils literal notranslate"><span class="pre">ittapi::cxx</span></code> target is an <code class="docutils literal notranslate"><span class="pre">INTERFACE</span></code> library that transitively links the |
| existing <code class="docutils literal notranslate"><span class="pre">ittnotify</span></code> static library and adds the C++ wrapper include directories.</p> |
| </section> |
| <section id="manual-gcc-g-linux"> |
| <h3>Manual GCC/G++ (Linux)<a class="headerlink" href="#manual-gcc-g-linux" title="Link to this heading"></a></h3> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>g++<span class="w"> </span>-std<span class="o">=</span>c++17<span class="w"> </span>-O2<span class="w"> </span><span class="se">\</span> |
| <span class="w"> </span>-I<ittapi-install-prefix>/include<span class="w"> </span><span class="se">\</span> |
| <span class="w"> </span>app.cpp<span class="w"> </span><span class="se">\</span> |
| <span class="w"> </span><ittapi-install-prefix>/lib/libittnotify.a<span class="w"> </span><span class="se">\</span> |
| <span class="w"> </span>-ldl<span class="w"> </span>-pthread<span class="w"> </span><span class="se">\</span> |
| <span class="w"> </span>-o<span class="w"> </span>app |
| </pre></div> |
| </div> |
| </section> |
| </section> |
| <section id="building-with-cmake"> |
| <h2>Building with CMake<a class="headerlink" href="#building-with-cmake" title="Link to this heading"></a></h2> |
| <p>From the repository root:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>cmake<span class="w"> </span>-B<span class="w"> </span>build<span class="w"> </span>-DCMAKE_BUILD_TYPE<span class="o">=</span>Release<span class="w"> </span>-DITT_API_CPP_SUPPORT<span class="o">=</span>ON |
| cmake<span class="w"> </span>--build<span class="w"> </span>build |
| </pre></div> |
| </div> |
| <p>The <code class="docutils literal notranslate"><span class="pre">ITT_API_CPP_SUPPORT</span></code> option is <code class="docutils literal notranslate"><span class="pre">OFF</span></code> by default.</p> |
| <p>You can also build with the build script:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span>buildall.py<span class="w"> </span>--cpp |
| </pre></div> |
| </div> |
| </section> |
| <section id="running-tests"> |
| <h2>Running Tests<a class="headerlink" href="#running-tests" title="Link to this heading"></a></h2> |
| <p>Tests are registered inside the <code class="docutils literal notranslate"><span class="pre">cpp/</span></code> subdirectory. After building:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ctest<span class="w"> </span>--test-dir<span class="w"> </span>build/cpp<span class="w"> </span>--output-on-failure |
| </pre></div> |
| </div> |
| </section> |
| <section id="performance-tips"> |
| <h2>Performance Tips<a class="headerlink" href="#performance-tips" title="Link to this heading"></a></h2> |
| <ul> |
| <li><p><strong>Pre-create</strong> <code class="docutils literal notranslate"><span class="pre">StringHandle</span></code> <strong>objects</strong> for task/region names used in hot paths. |
| The <code class="docutils literal notranslate"><span class="pre">StringHandle</span></code> overloads pass a raw pointer with no locking — this is the |
| zero-overhead path.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="c1">// Do this once at startup:</span> |
| <span class="n">ittapi</span><span class="o">::</span><span class="n">StringHandle</span><span class="w"> </span><span class="n">name</span><span class="p">{</span><span class="s">"compute"</span><span class="p">};</span> |
| |
| <span class="c1">// Then in hot code:</span> |
| <span class="k">auto</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="n">name</span><span class="p">);</span><span class="w"> </span><span class="c1">// no allocation, no lock</span> |
| </pre></div> |
| </div> |
| </li> |
| <li><p><strong>The</strong> <code class="docutils literal notranslate"><span class="pre">string_view</span></code> <strong>overloads</strong> are convenient but allocate a <code class="docutils literal notranslate"><span class="pre">std::string</span></code> |
| on cache miss and acquire a lock in the C library. Use them for setup or infrequent |
| tasks, not tight loops.</p></li> |
| <li><p><strong>Create</strong> <code class="docutils literal notranslate"><span class="pre">Domain</span></code> <strong>objects once</strong> and reuse them. Domain creation is a global |
| lookup — store them as class members or globals, not as function locals called |
| repeatedly.</p></li> |
| <li><p><strong>Use overlapped tasks</strong> (with IDs) only when you need tasks that end out of order. |
| Stack-based tasks (without IDs) are simpler and carry less internal state.</p></li> |
| </ul> |
| </section> |
| <section id="api-reference"> |
| <h2>API Reference<a class="headerlink" href="#api-reference" title="Link to this heading"></a></h2> |
| <section id="free-functions"> |
| <h3>Free Functions<a class="headerlink" href="#free-functions" title="Link to this heading"></a></h3> |
| <ul class="simple"> |
| <li><p><code class="docutils literal notranslate"><span class="pre">ittapi::pause()</span></code> — Pause collection.</p></li> |
| <li><p><code class="docutils literal notranslate"><span class="pre">ittapi::resume()</span></code> — Resume collection.</p></li> |
| <li><p><code class="docutils literal notranslate"><span class="pre">ittapi::set_thread_name(std::string_view</span> <span class="pre">name)</span></code> — Set the current thread’s name.</p></li> |
| </ul> |
| </section> |
| <section id="classes"> |
| <h3>Classes<a class="headerlink" href="#classes" title="Link to this heading"></a></h3> |
| <section id="ittapi-stringhandle"> |
| <h4>ittapi::StringHandle<a class="headerlink" href="#ittapi-stringhandle" title="Link to this heading"></a></h4> |
| <p>Lightweight wrapper around <code class="docutils literal notranslate"><span class="pre">__itt_string_handle*</span></code>.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">ittapi</span><span class="o">::</span><span class="n">StringHandle</span><span class="w"> </span><span class="n">h</span><span class="p">{</span><span class="s">"my_handle"</span><span class="p">};</span> |
| <span class="n">h</span><span class="p">.</span><span class="n">valid</span><span class="p">();</span><span class="w"> </span><span class="c1">// true if handle was created</span> |
| <span class="n">h</span><span class="p">.</span><span class="n">get</span><span class="p">();</span><span class="w"> </span><span class="c1">// underlying __itt_string_handle*</span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="ittapi-domain"> |
| <h4>ittapi::Domain<a class="headerlink" href="#ittapi-domain" title="Link to this heading"></a></h4> |
| <p>Lightweight wrapper around <code class="docutils literal notranslate"><span class="pre">__itt_domain*</span></code> with convenience factories.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">ittapi</span><span class="o">::</span><span class="n">Domain</span><span class="w"> </span><span class="n">d</span><span class="p">{</span><span class="s">"my.domain"</span><span class="p">};</span> |
| <span class="k">auto</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">d</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="s">"task_name"</span><span class="p">);</span><span class="w"> </span><span class="c1">// returns ScopedTask (RAII)</span> |
| <span class="k">auto</span><span class="w"> </span><span class="n">region</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">d</span><span class="p">.</span><span class="n">region</span><span class="p">(</span><span class="s">"region_name"</span><span class="p">);</span><span class="w"> </span><span class="c1">// returns ScopedRegion</span> |
| <span class="k">auto</span><span class="w"> </span><span class="n">frame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">d</span><span class="p">.</span><span class="n">frame</span><span class="p">();</span><span class="w"> </span><span class="c1">// returns ScopedFrame</span> |
| |
| <span class="n">d</span><span class="p">.</span><span class="n">task_begin</span><span class="p">(</span><span class="s">"work"</span><span class="p">);</span><span class="w"> </span><span class="c1">// manual task begin (simple stack-based)</span> |
| <span class="n">d</span><span class="p">.</span><span class="n">task_end</span><span class="p">();</span><span class="w"> </span><span class="c1">// manual task end</span> |
| |
| <span class="n">__itt_id</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">__itt_id_make</span><span class="p">(</span><span class="k">nullptr</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> |
| <span class="n">d</span><span class="p">.</span><span class="n">task_begin</span><span class="p">(</span><span class="s">"overlapped"</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">__itt_null</span><span class="p">);</span><span class="w"> </span><span class="c1">// manual task begin (overlapped)</span> |
| <span class="n">d</span><span class="p">.</span><span class="n">task_end</span><span class="p">(</span><span class="n">id</span><span class="p">);</span><span class="w"> </span><span class="c1">// manual task end by ID</span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="ittapi-scopedtask"> |
| <h4>ittapi::ScopedTask<a class="headerlink" href="#ittapi-scopedtask" title="Link to this heading"></a></h4> |
| <p>RAII wrapper for task begin/end. Use <code class="docutils literal notranslate"><span class="pre">domain.overlapped_task()</span></code> to create |
| an overlapped task (tasks that can end in any order). Each overlapped task |
| instance gets a unique <code class="docutils literal notranslate"><span class="pre">__itt_id</span></code> derived from its object address. The |
| <code class="docutils literal notranslate"><span class="pre">id()</span></code> method returns this ID.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="c1">// Simple task</span> |
| <span class="p">{</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="s">"work"</span><span class="p">);</span> |
| <span class="w"> </span><span class="c1">// ... do work ...</span> |
| <span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">end</span><span class="p">();</span><span class="w"> </span><span class="c1">// optional early end (idempotent)</span> |
| <span class="p">}</span><span class="w"> </span><span class="c1">// destructor ends task if still active</span> |
| </pre></div> |
| </div> |
| <p>Overlapped tasks — use <code class="docutils literal notranslate"><span class="pre">overlapped_task()</span></code>, optionally pass a parent ID:</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">parent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">overlapped_task</span><span class="p">(</span><span class="s">"parent"</span><span class="p">);</span><span class="w"> </span><span class="c1">// overlapped, no parent</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">overlapped_task</span><span class="p">(</span><span class="s">"child"</span><span class="p">,</span><span class="w"> </span><span class="n">parent</span><span class="p">.</span><span class="n">id</span><span class="p">());</span><span class="w"> </span><span class="c1">// overlapped, child of parent</span> |
| |
| <span class="w"> </span><span class="n">parent</span><span class="p">.</span><span class="n">end</span><span class="p">();</span><span class="w"> </span><span class="c1">// end parent while child is still running</span> |
| <span class="p">}</span><span class="w"> </span><span class="c1">// child ends here via destructor</span> |
| </pre></div> |
| </div> |
| <p>Overlapped tasks with explicit IDs (advanced):</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> |
| <span class="w"> </span><span class="n">__itt_id</span><span class="w"> </span><span class="n">parent_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">__itt_id_make</span><span class="p">(</span><span class="k">nullptr</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">parent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="s">"parent"</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="n">__itt_null</span><span class="p">);</span> |
| |
| <span class="w"> </span><span class="n">__itt_id</span><span class="w"> </span><span class="n">child_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">__itt_id_make</span><span class="p">(</span><span class="k">nullptr</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> |
| <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">domain</span><span class="p">.</span><span class="n">task</span><span class="p">(</span><span class="s">"child"</span><span class="p">,</span><span class="w"> </span><span class="n">child_id</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">);</span> |
| |
| <span class="w"> </span><span class="n">parent</span><span class="p">.</span><span class="n">end</span><span class="p">();</span><span class="w"> </span><span class="c1">// end parent while child is still running</span> |
| <span class="p">}</span><span class="w"> </span><span class="c1">// child ends here via destructor</span> |
| </pre></div> |
| </div> |
| <p>For manual (non-RAII) control:</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">domain</span><span class="p">.</span><span class="n">task_begin</span><span class="p">(</span><span class="s">"work"</span><span class="p">);</span> |
| <span class="c1">// ... do work ...</span> |
| <span class="n">domain</span><span class="p">.</span><span class="n">task_end</span><span class="p">();</span> |
| |
| <span class="c1">// Or with overlapped tasks:</span> |
| <span class="n">__itt_id</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">__itt_id_make</span><span class="p">(</span><span class="k">nullptr</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> |
| <span class="n">domain</span><span class="p">.</span><span class="n">task_begin</span><span class="p">(</span><span class="s">"overlapped_work"</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">__itt_null</span><span class="p">);</span> |
| <span class="c1">// ... do work ...</span> |
| <span class="n">domain</span><span class="p">.</span><span class="n">task_end</span><span class="p">(</span><span class="n">id</span><span class="p">);</span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="ittapi-scopedregion"> |
| <h4>ittapi::ScopedRegion<a class="headerlink" href="#ittapi-scopedregion" title="Link to this heading"></a></h4> |
| <p>RAII wrapper for region begin/end.</p> |
| </section> |
| <section id="ittapi-scopedframe"> |
| <h4>ittapi::ScopedFrame<a class="headerlink" href="#ittapi-scopedframe" title="Link to this heading"></a></h4> |
| <p>RAII wrapper for frame begin/end. Supports explicit timestamp submission.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">ittapi</span><span class="o">::</span><span class="n">ScopedFrame</span><span class="o">::</span><span class="n">submit</span><span class="p">(</span><span class="n">domain</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="n">begin_ts</span><span class="p">,</span><span class="w"> </span><span class="n">end_ts</span><span class="p">);</span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="ittapi-scopedpause"> |
| <h4>ittapi::ScopedPause<a class="headerlink" href="#ittapi-scopedpause" title="Link to this heading"></a></h4> |
| <p>RAII wrapper for pause/resume. Constructor pauses, destructor resumes.</p> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> |
| <span class="w"> </span><span class="n">ittapi</span><span class="o">::</span><span class="n">ScopedPause</span><span class="w"> </span><span class="n">sp</span><span class="p">;</span> |
| <span class="w"> </span><span class="c1">// collection is paused</span> |
| <span class="w"> </span><span class="n">sp</span><span class="p">.</span><span class="n">resume_now</span><span class="p">();</span><span class="w"> </span><span class="c1">// optional early resume</span> |
| <span class="p">}</span> |
| </pre></div> |
| </div> |
| </section> |
| </section> |
| </section> |
| </section> |
| |
| |
| </div> |
| </div> |
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> |
| <a href="jitapi/ijit_-getnewmethodid.html" class="btn btn-neutral float-left" title="iJIT GetNewMethodID" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> |
| <a href="ref_collector.html" class="btn btn-neutral float-right" title="ITT API Reference Collector" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> |
| </div> |
| |
| <hr/> |
| |
| <div role="contentinfo"> |
| <p>© Copyright 2026 Intel Corporation.</p> |
| </div> |
| |
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |
| provided by <a href="https://readthedocs.org">Read the Docs</a>. |
| |
| |
| </footer> |
| </div> |
| </div> |
| </section> |
| </div> |
| <script> |
| jQuery(function () { |
| SphinxRtdTheme.Navigation.enable(true); |
| }); |
| </script> |
| |
| </body> |
| </html> |