cutlass/python/docs/cutlass.utils.html

663 lines
48 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js" lang="en">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Examples" href="examples.html" /><link rel="prev" title="Operations" href="cutlass.op.html" />
<link rel="canonical" href="docs/cutlass.utils.html" />
<!-- Generated with Sphinx 6.1.3 and Furo 2023.03.27 -->
<title>Utilities - CUTLASS Python</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="_static/tabs.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
<style>
body {
--color-code-background: #eeffcc;
--color-code-foreground: black;
--color-brand-primary: #76B900;
--color-brand-content: #76B900;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #272822;
--color-code-foreground: #f8f8f2;
--color-brand-primary: #76B900;
--color-brand-content: #76B900;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #272822;
--color-code-foreground: #f8f8f2;
--color-brand-primary: #76B900;
--color-brand-content: #76B900;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24">
<title>Auto light/dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<path d="M13 12h5" />
<path d="M13 15h4" />
<path d="M13 18h1" />
<path d="M13 9h4" />
<path d="M13 6h1" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="index.html"><div class="brand">CUTLASS Python</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container">
<img class="sidebar-logo only-light" src="_static/cutlass-logo-small.png" alt="Light Logo"/>
<img class="sidebar-logo only-dark" src="_static/cutlass-logo-small.png" alt="Dark Logo"/>
</div>
<span class="sidebar-brand-text">CUTLASS Python</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<ul>
<li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Getting Started:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="externals/00_basic_gemm.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="contribute.html">Contributing</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Python Documentation:</span></p>
<ul class="current">
<li class="toctree-l1 current has-children"><a class="reference internal" href="modules.html">CUTLASS Python API</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
<li class="toctree-l2 current has-children"><a class="reference internal" href="cutlass.html">CUTLASS</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="cutlass.emit.html">Emitters</a></li>
<li class="toctree-l3"><a class="reference internal" href="cutlass.op.html">Operations</a></li>
<li class="toctree-l3 current current-page"><a class="current reference internal" href="#">Utilities</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Examples and Tutorials:</span></p>
<ul>
<li class="toctree-l1 has-children"><a class="reference internal" href="examples.html">Examples</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="externals/00_basic_gemm.html">Basic GEMM</a></li>
<li class="toctree-l2"><a class="reference internal" href="externals/01_epilogue.html">Epilogue</a></li>
<li class="toctree-l2"><a class="reference internal" href="externals/02_pytorch_extension_grouped_gemm.html">PyTorch Extension</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Reference:</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="https://github.com/NVIDIA/cutlass">Github</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main">
<section id="utilities">
<h1>Utilities<a class="headerlink" href="#utilities" title="Permalink to this heading">#</a></h1>
<section id="module-cutlass.utils.check">
<span id="checks"></span><h2>Checks<a class="headerlink" href="#module-cutlass.utils.check" title="Permalink to this heading">#</a></h2>
<p>Utility functions for checking constraints on kernels and calculating kernel attributes</p>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.alignment_or_default">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">alignment_or_default</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">alignment_provided</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default_alignment</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#alignment_or_default"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.alignment_or_default" title="Permalink to this definition">#</a></dt>
<dd><p>Returns <cite>alignment_provided</cite> if it is set, otherwise <cite>default_alignment</cite> and checks
that <cite>alignment_provided</cite> does not exceed <cite>default_alignment</cite>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>alignment_provided</strong> (<em>int</em>) alignment preference specified. Can be None.</p></li>
<li><p><strong>default_alignment</strong> (<em>int</em>) alignment to use if <cite>alignment_provided</cite> is None</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>alignment to use</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>int</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.calculate_smem_usage">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">calculate_smem_usage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operation</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#calculate_smem_usage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.calculate_smem_usage" title="Permalink to this definition">#</a></dt>
<dd><p>Returns the amount of shared memory in bytes consumed by a kernel.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>number of bytes of shared memory consumed by the operation</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>int</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.calculate_smem_usage_per_stage">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">calculate_smem_usage_per_stage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tile_description</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operation_kind</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#calculate_smem_usage_per_stage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.calculate_smem_usage_per_stage" title="Permalink to this definition">#</a></dt>
<dd><p>Returns the amount of shared memory in bytes consumed in a single stage of a kernel.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>number of bytes of shared memory consumed by a single stage</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>int</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.valid_cluster_shape">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">valid_cluster_shape</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cluster_shape</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#valid_cluster_shape"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.valid_cluster_shape" title="Permalink to this definition">#</a></dt>
<dd><p>Checks whether a device with <cite>cc</cite> supports a thread block cluster of shape <cite>cluster_shape</cite>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cc</strong> (<em>int</em>) compute capability of device in question</p></li>
<li><p><strong>cluster_shape</strong> (<em>list</em>) dimensions of thread block cluster shape to check</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>tuple with the first element indicating whether the provided cluster shape is
valid for the provided device and the second element being an error message</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.valid_kernel_schedule">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">valid_kernel_schedule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kernel_schedule</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#valid_kernel_schedule"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.valid_kernel_schedule" title="Permalink to this definition">#</a></dt>
<dd><p>Checks whether a device with <code class="docutils literal notranslate"><span class="pre">cc</span></code> supports <code class="docutils literal notranslate"><span class="pre">kernel_schedule</span></code>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cc</strong> (<em>int</em>) compute capability of device in question</p></li>
<li><p><strong>kernel_schedule</strong> (<em>KernelScheduleType</em>) kernel schedule type</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>tuple with the first element indicating whether the provided kernel schedule is
valid for the provided device and the second element being an error message</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.check.valid_stage_count">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.check.</span></span><span class="sig-name descname"><span class="pre">valid_stage_count</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">td</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/check.html#valid_stage_count"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.check.valid_stage_count" title="Permalink to this definition">#</a></dt>
<dd><p>Checks whether a device with <cite>cc</cite> supports the number of stages within <cite>tile_description</cite>, both
based on raw limits on the number of stages and based on shared memory capacity</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cc</strong> (<em>int</em>) compute capability of device in question</p></li>
<li><p><strong>td</strong> (<em>TileDescription</em>) tile description to check</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>tuple with the first element indicating whether the provided tile description is
valid for the provided device and the second element being an error message</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl>
</section>
<section id="module-cutlass.utils.datatypes">
<span id="data-types"></span><h2>Data Types<a class="headerlink" href="#module-cutlass.utils.datatypes" title="Permalink to this heading">#</a></h2>
<p>Utility functions for converting between frontend datatypes and CUTLASS datatypes</p>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.backend_math_operation">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">backend_math_operation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">math_op</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#backend_math_operation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.backend_math_operation" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>math_op</strong> (<em>MathOperation</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.bfloat16_library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">bfloat16_library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#bfloat16_library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.bfloat16_library_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>DataType</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.bfloat16_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">bfloat16_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#bfloat16_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.bfloat16_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bfloat16</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.binding_layout">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">binding_layout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">layout</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#binding_layout"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.binding_layout" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.binding_library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">binding_library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#binding_library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.binding_library_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.binding_opclass">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">binding_opclass</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">opclass</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#binding_opclass"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.binding_opclass" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>opclass</strong> (<em>OpcodeClass</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.binding_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">binding_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#binding_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.binding_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.construct_backend_td">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">construct_backend_td</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">td</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kernel_schedule</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#construct_backend_td"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.construct_backend_td" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>td</strong> (<em>TileDescription</em>) </p></li>
<li><p><strong>kernel_schedule</strong> (<em>KernelScheduleType</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><em>TileDescription</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.cupy_library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">cupy_library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#cupy_library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.cupy_library_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>DataType</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.cupy_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">cupy_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#cupy_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.cupy_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.get_datatype_and_layout">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">get_datatype_and_layout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tensor</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#get_datatype_and_layout"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.get_datatype_and_layout" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.has_binding_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">has_binding_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#has_binding_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.has_binding_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>inp</strong> (<em>DataType</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.library_layout">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">library_layout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">layout</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#library_layout"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.library_layout" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.library_to_binding">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">library_to_binding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#library_to_binding"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.library_to_binding" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>inp</strong> (<em>DataType</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.library_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.numpy_library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">numpy_library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#numpy_library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.numpy_library_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>DataType</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.numpy_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">numpy_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#numpy_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.numpy_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.td_from_profiler_op">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">td_from_profiler_op</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">op</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#td_from_profiler_op"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.td_from_profiler_op" title="Permalink to this definition">#</a></dt>
<dd><p>Converts the profilers TileDescription in <code class="docutils literal notranslate"><span class="pre">op</span></code> into the backend TileDescription</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>op</strong> profiler Operation</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>backend TileDescription</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>cutlass.backend.TileDescription</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.td_from_profiler_td">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">td_from_profiler_td</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">td</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#td_from_profiler_td"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.td_from_profiler_td" title="Permalink to this definition">#</a></dt>
<dd><p>Converts the profilers TileDescription into the backend TileDescription</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>td</strong> (<em>cutlass.TileDescription</em>) profiler TileDescription</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>backend TileDescription</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>cutlass.backend.TileDescription</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.torch_library_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">torch_library_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#torch_library_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.torch_library_type" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>DataType</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="cutlass.utils.datatypes.torch_type">
<span class="sig-prename descclassname"><span class="pre">cutlass.utils.datatypes.</span></span><span class="sig-name descname"><span class="pre">torch_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/cutlass/utils/datatypes.html#torch_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#cutlass.utils.datatypes.torch_type" title="Permalink to this definition">#</a></dt>
<dd></dd></dl>
</section>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="examples.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Examples</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="cutlass.op.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Operations</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
Copyright &#169; 2023, NVIDIA
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
<div class="icons">
<a class="muted-link " href="https://github.com/NVIDIA/cutlass" aria-label="GitHub">
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
</svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Utilities</a><ul>
<li><a class="reference internal" href="#module-cutlass.utils.check">Checks</a><ul>
<li><a class="reference internal" href="#cutlass.utils.check.alignment_or_default"><code class="docutils literal notranslate"><span class="pre">alignment_or_default()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.check.calculate_smem_usage"><code class="docutils literal notranslate"><span class="pre">calculate_smem_usage()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.check.calculate_smem_usage_per_stage"><code class="docutils literal notranslate"><span class="pre">calculate_smem_usage_per_stage()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.check.valid_cluster_shape"><code class="docutils literal notranslate"><span class="pre">valid_cluster_shape()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.check.valid_kernel_schedule"><code class="docutils literal notranslate"><span class="pre">valid_kernel_schedule()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.check.valid_stage_count"><code class="docutils literal notranslate"><span class="pre">valid_stage_count()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#module-cutlass.utils.datatypes">Data Types</a><ul>
<li><a class="reference internal" href="#cutlass.utils.datatypes.backend_math_operation"><code class="docutils literal notranslate"><span class="pre">backend_math_operation()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.bfloat16_library_type"><code class="docutils literal notranslate"><span class="pre">bfloat16_library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.bfloat16_type"><code class="docutils literal notranslate"><span class="pre">bfloat16_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.binding_layout"><code class="docutils literal notranslate"><span class="pre">binding_layout()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.binding_library_type"><code class="docutils literal notranslate"><span class="pre">binding_library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.binding_opclass"><code class="docutils literal notranslate"><span class="pre">binding_opclass()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.binding_type"><code class="docutils literal notranslate"><span class="pre">binding_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.construct_backend_td"><code class="docutils literal notranslate"><span class="pre">construct_backend_td()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.cupy_library_type"><code class="docutils literal notranslate"><span class="pre">cupy_library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.cupy_type"><code class="docutils literal notranslate"><span class="pre">cupy_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.get_datatype_and_layout"><code class="docutils literal notranslate"><span class="pre">get_datatype_and_layout()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.has_binding_type"><code class="docutils literal notranslate"><span class="pre">has_binding_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.library_layout"><code class="docutils literal notranslate"><span class="pre">library_layout()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.library_to_binding"><code class="docutils literal notranslate"><span class="pre">library_to_binding()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.library_type"><code class="docutils literal notranslate"><span class="pre">library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.numpy_library_type"><code class="docutils literal notranslate"><span class="pre">numpy_library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.numpy_type"><code class="docutils literal notranslate"><span class="pre">numpy_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.td_from_profiler_op"><code class="docutils literal notranslate"><span class="pre">td_from_profiler_op()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.td_from_profiler_td"><code class="docutils literal notranslate"><span class="pre">td_from_profiler_td()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.torch_library_type"><code class="docutils literal notranslate"><span class="pre">torch_library_type()</span></code></a></li>
<li><a class="reference internal" href="#cutlass.utils.datatypes.torch_type"><code class="docutils literal notranslate"><span class="pre">torch_type()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/tabs.js"></script>
<script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script>
</body>
</html>