FT_DSP.gitlink.net/master/html/functionlib/dsplib/affine.html

406 lines
82 KiB
HTML
Raw 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="writer-html5" lang="zh-CN" 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>Affine &mdash; MindSpore Signal+ 使用手册 alpha 文档</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../_static/table.css?v=72b86d3e" />
<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=406e4f49"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=beaddf03"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="../../_static/table.js?v=99ed15ba"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="Assign" href="assign.html" />
<link rel="prev" title="OneHot" href="onehot.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">
MindSpore Signal+ 使用手册
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<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="导航菜单">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../index.html">算子库支持</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../refdoc/index.html">参考资料</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">MindSpore Signal+ 使用手册</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">算子库支持</a></li>
<li class="breadcrumb-item"><a href="dsplib_index.html">DSP Library C API Reference</a></li>
<li class="breadcrumb-item active">Affine</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/functionlib/dsplib/affine.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="affine">
<h1>Affine<a class="headerlink" href="#affine" title="Link to this heading"></a></h1>
<p>将来自输入数据的若干行按照一个“context”偏移集合拼接/裁切成一个中间矩阵,再对该中间矩阵与权重做一次矩阵乘和偏置加法操作,最后应用激活函数(如果指定),得到输出结果。</p>
<p>该算子支持全量运行和增量运行两种模式并维护了上一次全窗口的输出previous_output以支持增量更新。</p>
<dl class="simple">
<dt>输入:</dt><dd><ul class="simple">
<li><p><strong>input0</strong> - 输入数据张量地址。</p></li>
<li><p><strong>input1</strong> - 权重矩阵地址。</p></li>
<li><p><strong>input2</strong> - 偏置向量地址。</p></li>
<li><p><strong>input0_shape</strong> - 输入数据形状数组长度为3第一维值为1。</p></li>
<li><p><strong>input1_shape</strong> - 权重矩阵形状数组长度为3第一维值为1。</p></li>
<li><p><strong>input2_shape</strong> - 偏置向量形状数组长度为3第一维值为1。</p></li>
<li><p><strong>output_shape</strong> - 输出张量形状数组长度为3第一维值为1。</p></li>
<li><p><strong>context</strong> - 上下文索引数组,值递增。</p></li>
<li><p><strong>context_size</strong> - 上下文大小。</p></li>
<li><p><strong>output_dim</strong> - 输出维度,即输入张量最后一维大小乘以上下文大小。</p></li>
<li><p><strong>activation_type</strong> - 激活函数类型0-8。</p></li>
<li><p><strong>is_full_run</strong> - 全量运行标志指针所指值为1时为全量更新运行后修改为0为0时为增量更新。</p></li>
<li><p><strong>full_input</strong> - 全量输入缓冲区地址。</p></li>
<li><p><strong>full_input_shape</strong> - 全量输入形状数组。</p></li>
<li><p><strong>increment_input</strong> - 增量输入缓冲区地址。</p></li>
<li><p><strong>increment_input_shape</strong> - 增量输入形状数组。</p></li>
<li><p><strong>increment_output</strong> - 增量输出缓冲区地址。</p></li>
<li><p><strong>increment_output_shape</strong> - 增量输出形状数组。</p></li>
<li><p><strong>previous_output</strong> - 先前输出缓冲区地址。</p></li>
<li><p><strong>previous_output_shape</strong> - 先前输出形状数组。</p></li>
<li><p><strong>core_mask(int, 可选)</strong> - 核掩码(仅适用于共享存储版本)。</p></li>
</ul>
</dd>
<dt>输出:</dt><dd><ul class="simple">
<li><p><strong>output</strong> - 仿射变换结果张量地址。</p></li>
</ul>
</dd>
<dt>支持平台:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">FT78NE</span></code>
<code class="docutils literal notranslate"><span class="pre">MT7004</span></code></p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">备注</p>
<ul class="simple">
<li><p>FT78NE 支持的数据类型int8, fp32</p></li>
<li><p>MT7004 支持的数据类型fp16, fp32</p></li>
</ul>
</div>
<p><strong>激活函数类型定义:</strong></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="cp">#define ActivationType_NO_ACTIVATION 0 </span><span class="c1">// 无激活函数</span>
<span class="linenos">2</span><span class="cp">#define ActivationType_RELU 1 </span><span class="c1">// ReLU激活函数</span>
<span class="linenos">3</span><span class="cp">#define ActivationType_RELU6 2 </span><span class="c1">// ReLU6激活函数</span>
<span class="linenos">4</span><span class="cp">#define ActivationType_SIGMOID 3 </span><span class="c1">// Sigmoid激活函数</span>
<span class="linenos">5</span><span class="cp">#define ActivationType_TANH 4 </span><span class="c1">// Tanh激活函数</span>
<span class="linenos">6</span><span class="cp">#define ActivationType_SWISH 5 </span><span class="c1">// Swish激活函数</span>
<span class="linenos">7</span><span class="cp">#define ActivationType_HSWISH 6 </span><span class="c1">// Hard Swish激活函数</span>
<span class="linenos">8</span><span class="cp">#define ActivationType_HSIGMOID 7 </span><span class="c1">// Hard Sigmoid激活函数</span>
<span class="linenos">9</span><span class="cp">#define ActivationType_SOFTPLUS 8 </span><span class="c1">// Softplus激活函数</span>
</pre></div>
</div>
<p><strong>激活函数数学公式:</strong></p>
<ul class="simple">
<li><p><strong>ReLU</strong>: <span class="math notranslate nohighlight">\(f(x) = \max(0, x)\)</span></p></li>
<li><p><strong>ReLU6</strong>: <span class="math notranslate nohighlight">\(f(x) = \min(\max(0, x), 6)\)</span></p></li>
<li><p><strong>Sigmoid</strong>: <span class="math notranslate nohighlight">\(f(x) = \frac{1}{1 + e^{-x}}\)</span></p></li>
<li><p><strong>Tanh</strong>: <span class="math notranslate nohighlight">\(f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\)</span></p></li>
<li><p><strong>Swish</strong>: <span class="math notranslate nohighlight">\(f(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}}\)</span></p></li>
<li><p><strong>Hard Swish</strong>: <span class="math notranslate nohighlight">\(f(x) = x \cdot \frac{\min(\max(x + 3, 0), 6)}{6}\)</span></p></li>
<li><p><strong>Hard Sigmoid</strong>: <span class="math notranslate nohighlight">\(f(x) = \frac{\min(\max(x + 3, 0), 6)}{6}\)</span></p></li>
<li><p><strong>Softplus</strong>: <span class="math notranslate nohighlight">\(f(x) = ln(1 + e^x)\)</span></p></li>
</ul>
<p><strong>参数数组结构:</strong></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">21</span><span class="p">];</span>
<span class="linenos"> 2</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入数据张量地址</span>
<span class="linenos"> 3</span><span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1</span><span class="p">;</span><span class="w"> </span><span class="c1">// 权重矩阵地址</span>
<span class="linenos"> 4</span><span class="n">params</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2</span><span class="p">;</span><span class="w"> </span><span class="c1">// 偏置向量地址</span>
<span class="linenos"> 5</span><span class="n">params</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输出张量地址</span>
<span class="linenos"> 6</span><span class="n">params</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入数据形状数组</span>
<span class="linenos"> 7</span><span class="n">params</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 权重矩阵形状数组</span>
<span class="linenos"> 8</span><span class="n">params</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 偏置向量形状数组</span>
<span class="linenos"> 9</span><span class="n">params</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输出张量形状数组</span>
<span class="linenos">10</span><span class="n">params</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context</span><span class="p">;</span><span class="w"> </span><span class="c1">// 上下文索引数组</span>
<span class="linenos">11</span><span class="n">params</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context_size</span><span class="p">;</span><span class="w"> </span><span class="c1">// 上下文大小</span>
<span class="linenos">12</span><span class="n">params</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_dim</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输出维度</span>
<span class="linenos">13</span><span class="n">params</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">activation_type</span><span class="p">;</span><span class="w"> </span><span class="c1">// 激活函数类型</span>
<span class="linenos">14</span><span class="n">params</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="o">&amp;</span><span class="n">is_full_run</span><span class="p">;</span><span class="w"> </span><span class="c1">// 全量运行标志指针</span>
<span class="linenos">15</span><span class="n">params</span><span class="p">[</span><span class="mi">13</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input</span><span class="p">;</span><span class="w"> </span><span class="c1">// 全量输入缓冲区地址</span>
<span class="linenos">16</span><span class="n">params</span><span class="p">[</span><span class="mi">14</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 全量输入形状数组</span>
<span class="linenos">17</span><span class="n">params</span><span class="p">[</span><span class="mi">15</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input</span><span class="p">;</span><span class="w"> </span><span class="c1">// 增量输入缓冲区地址</span>
<span class="linenos">18</span><span class="n">params</span><span class="p">[</span><span class="mi">16</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 增量输入形状数组</span>
<span class="linenos">19</span><span class="n">params</span><span class="p">[</span><span class="mi">17</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output</span><span class="p">;</span><span class="w"> </span><span class="c1">// 增量输出缓冲区地址</span>
<span class="linenos">20</span><span class="n">params</span><span class="p">[</span><span class="mi">18</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 增量输出形状数组</span>
<span class="linenos">21</span><span class="n">params</span><span class="p">[</span><span class="mi">19</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output</span><span class="p">;</span><span class="w"> </span><span class="c1">// 先前输出缓冲区地址</span>
<span class="linenos">22</span><span class="n">params</span><span class="p">[</span><span class="mi">20</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output_shape</span><span class="p">;</span><span class="w"> </span><span class="c1">// 先前输出形状数组</span>
</pre></div>
</div>
<p><strong>共享存储版本:</strong></p>
<dl class="c function">
<dt class="sig sig-object c" id="c.i8_affine_s">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_affine_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_affine_s" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.fp_affine_s">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_affine_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_affine_s" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.hp_affine_s">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_affine_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_affine_s" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<p><strong>C调用示例</strong></p>
<blockquote>
<div><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="c1">// FT78NE 多核示例</span>
<span class="linenos"> 2</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="linenos"> 3</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdlib.h&gt;</span>
<span class="linenos"> 4</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;time.h&gt;</span>
<span class="linenos"> 5</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;affine.h&gt;</span>
<span class="linenos"> 6</span>
<span class="linenos"> 7</span><span class="kt">void</span><span class="w"> </span><span class="nf">test_fp_affine_s</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">activation_type</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">full_run</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">core_mask</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="n">srand</span><span class="p">(</span><span class="n">time</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
<span class="linenos">10</span>
<span class="linenos">11</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">core_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DNUM</span><span class="p">;</span>
<span class="linenos">12</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">logic_core_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetLogicCoreId</span><span class="p">(</span><span class="n">core_mask</span><span class="p">,</span><span class="w"> </span><span class="n">core_id</span><span class="p">);</span>
<span class="linenos">13</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetCoreNum</span><span class="p">(</span><span class="n">core_mask</span><span class="p">);</span>
<span class="linenos">14</span>
<span class="linenos">15</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">is_full_run</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">full_run</span><span class="p">;</span>
<span class="linenos">16</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">context</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">};</span>
<span class="linenos">17</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">context_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">c</span><span class="p">;</span>
<span class="linenos">18</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">output_dim</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">c</span><span class="p">;</span>
<span class="linenos">19</span>
<span class="linenos">20</span><span class="w"> </span><span class="c1">// 形状定义</span>
<span class="linenos">21</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">};</span>
<span class="linenos">22</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input1_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">23</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">24</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">25</span>
<span class="linenos">26</span><span class="w"> </span><span class="c1">// 中间缓冲区形状</span>
<span class="linenos">27</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">full_input_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="n">context</span><span class="p">[</span><span class="n">context_size</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">context</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span><span class="w"> </span><span class="n">output_dim</span><span class="p">};</span>
<span class="linenos">28</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">increment_input_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_dim</span><span class="p">};</span>
<span class="linenos">29</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">increment_output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]};</span>
<span class="linenos">30</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">previous_output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]};</span>
<span class="linenos">31</span>
<span class="linenos">32</span><span class="w"> </span><span class="c1">// 内存分配</span>
<span class="linenos">33</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input0</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="p">);</span>
<span class="linenos">34</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x100000</span><span class="p">);</span>
<span class="linenos">35</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x200000</span><span class="p">);</span>
<span class="linenos">36</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x300000</span><span class="p">);</span>
<span class="linenos">37</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">full_input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x400000</span><span class="p">);</span>
<span class="linenos">38</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">increment_input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x500000</span><span class="p">);</span>
<span class="linenos">39</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">increment_output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x600000</span><span class="p">);</span>
<span class="linenos">40</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">previous_output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0xA0400000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x700000</span><span class="p">);</span>
<span class="linenos">41</span>
<span class="linenos">42</span><span class="w"> </span><span class="c1">// 初始化数据</span>
<span class="linenos">43</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">logic_core_id</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">44</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input0_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="linenos">45</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input1_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input1_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input1_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input1_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="linenos">46</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input2_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="linenos">47</span>
<span class="linenos">48</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">input0_len</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">49</span><span class="w"> </span><span class="n">input0</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="kt">float</span><span class="p">)</span><span class="n">rand</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">RAND_MAX</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="linenos">50</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">51</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">input1_len</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">52</span><span class="w"> </span><span class="n">input1</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="kt">float</span><span class="p">)</span><span class="n">rand</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">RAND_MAX</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="linenos">53</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">54</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">55</span><span class="w"> </span><span class="n">input2</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="kt">float</span><span class="p">)</span><span class="n">rand</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">RAND_MAX</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="linenos">56</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">57</span><span class="w"> </span><span class="n">input2</span><span class="p">[</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input2</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="linenos">58</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">59</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">60</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">61</span>
<span class="linenos">62</span><span class="w"> </span><span class="c1">// 准备参数数组</span>
<span class="linenos">63</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">21</span><span class="p">];</span>
<span class="linenos">64</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0</span><span class="p">;</span>
<span class="linenos">65</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1</span><span class="p">;</span>
<span class="linenos">66</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2</span><span class="p">;</span>
<span class="linenos">67</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output</span><span class="p">;</span>
<span class="linenos">68</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0_shape</span><span class="p">;</span>
<span class="linenos">69</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1_shape</span><span class="p">;</span>
<span class="linenos">70</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2_shape</span><span class="p">;</span>
<span class="linenos">71</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_shape</span><span class="p">;</span>
<span class="linenos">72</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context</span><span class="p">;</span>
<span class="linenos">73</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context_size</span><span class="p">;</span>
<span class="linenos">74</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_dim</span><span class="p">;</span>
<span class="linenos">75</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">activation_type</span><span class="p">;</span>
<span class="linenos">76</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="o">&amp;</span><span class="n">is_full_run</span><span class="p">;</span>
<span class="linenos">77</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">13</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input</span><span class="p">;</span>
<span class="linenos">78</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">14</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input_shape</span><span class="p">;</span>
<span class="linenos">79</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">15</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input</span><span class="p">;</span>
<span class="linenos">80</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">16</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input_shape</span><span class="p">;</span>
<span class="linenos">81</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">17</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output</span><span class="p">;</span>
<span class="linenos">82</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">18</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output_shape</span><span class="p">;</span>
<span class="linenos">83</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">19</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output</span><span class="p">;</span>
<span class="linenos">84</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">20</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output_shape</span><span class="p">;</span>
<span class="linenos">85</span>
<span class="linenos">86</span><span class="w"> </span><span class="c1">// 执行 Affine 操作</span>
<span class="hll"><span class="linenos">87</span><span class="w"> </span><span class="n">fp_affine_s</span><span class="p">(</span><span class="n">params</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
</span><span class="linenos">88</span><span class="p">}</span>
<span class="linenos">89</span>
<span class="linenos">90</span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">91</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">23</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">31</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">29</span><span class="p">;</span>
<span class="linenos">92</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">activation_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// 激活函数类型</span>
<span class="linenos">93</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">full_run</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// 全量运行标志</span>
<span class="linenos">94</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">core_mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0xff</span><span class="p">;</span><span class="w"> </span><span class="c1">// 核掩码</span>
<span class="linenos">95</span>
<span class="linenos">96</span><span class="w"> </span><span class="n">test_fp_affine_s</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="n">activation_type</span><span class="p">,</span><span class="w"> </span><span class="n">full_run</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
<span class="linenos">97</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="linenos">98</span><span class="p">}</span>
</pre></div>
</div>
</div></blockquote>
<p><strong>私有存储版本:</strong></p>
<dl class="c function">
<dt class="sig sig-object c" id="c.i8_affine_p">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_affine_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_affine_p" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.fp_affine_p">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_affine_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_affine_p" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.hp_affine_p">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_affine_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">params</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_affine_p" title="Link to this definition"></a><br /></dt>
<dd></dd></dl>
<p><strong>C调用示例</strong></p>
<blockquote>
<div><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="c1">// FT78NE 单核示例</span>
<span class="linenos"> 2</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="linenos"> 3</span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;affine.h&gt;</span>
<span class="linenos"> 4</span>
<span class="linenos"> 5</span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="c1">// 参数设置(与共享版本类似)</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">32</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">16</span><span class="p">;</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">is_full_run</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">full_run</span><span class="p">;</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">context</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">};</span>
<span class="linenos">10</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">context_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">c</span><span class="p">;</span>
<span class="linenos">11</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">output_dim</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">c</span><span class="p">;</span>
<span class="linenos">12</span>
<span class="linenos">13</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">};</span>
<span class="linenos">14</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input1_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">15</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input2_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">16</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">o</span><span class="p">};</span>
<span class="linenos">17</span>
<span class="linenos">18</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">full_input_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">input0_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="n">context</span><span class="p">[</span><span class="n">context_size</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">context</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span><span class="w"> </span><span class="n">output_dim</span><span class="p">};</span>
<span class="linenos">19</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">increment_input_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_dim</span><span class="p">};</span>
<span class="linenos">20</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">increment_output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]};</span>
<span class="linenos">21</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">previous_output_shape</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">output_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]};</span>
<span class="linenos">22</span>
<span class="linenos">23</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input0</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="p">);</span>
<span class="linenos">24</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x100000</span><span class="p">);</span>
<span class="linenos">25</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">input2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x200000</span><span class="p">);</span>
<span class="linenos">26</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x300000</span><span class="p">);</span>
<span class="linenos">27</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">full_input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x400000</span><span class="p">);</span>
<span class="linenos">28</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">increment_input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x500000</span><span class="p">);</span>
<span class="linenos">29</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">increment_output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x600000</span><span class="p">);</span>
<span class="linenos">30</span><span class="w"> </span><span class="kt">float</span><span class="o">*</span><span class="w"> </span><span class="n">previous_output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)(</span><span class="mh">0x10810000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0x700000</span><span class="p">);</span>
<span class="linenos">31</span>
<span class="linenos">32</span><span class="w"> </span><span class="c1">// 准备参数数组(与共享版本相同)</span>
<span class="linenos">33</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">21</span><span class="p">];</span>
<span class="linenos">34</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0</span><span class="p">;</span>
<span class="linenos">35</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1</span><span class="p">;</span>
<span class="linenos">36</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2</span><span class="p">;</span>
<span class="linenos">37</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output</span><span class="p">;</span>
<span class="linenos">38</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input0_shape</span><span class="p">;</span>
<span class="linenos">39</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input1_shape</span><span class="p">;</span>
<span class="linenos">40</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">input2_shape</span><span class="p">;</span>
<span class="linenos">41</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_shape</span><span class="p">;</span>
<span class="linenos">42</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context</span><span class="p">;</span>
<span class="linenos">43</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">context_size</span><span class="p">;</span>
<span class="linenos">44</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">output_dim</span><span class="p">;</span>
<span class="linenos">45</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">activation_type</span><span class="p">;</span>
<span class="linenos">46</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="o">&amp;</span><span class="n">is_full_run</span><span class="p">;</span>
<span class="linenos">47</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">13</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input</span><span class="p">;</span>
<span class="linenos">48</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">14</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">full_input_shape</span><span class="p">;</span>
<span class="linenos">49</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">15</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input</span><span class="p">;</span>
<span class="linenos">50</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">16</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_input_shape</span><span class="p">;</span>
<span class="linenos">51</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">17</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output</span><span class="p">;</span>
<span class="linenos">52</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">18</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">increment_output_shape</span><span class="p">;</span>
<span class="linenos">53</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">19</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output</span><span class="p">;</span>
<span class="linenos">54</span><span class="w"> </span><span class="n">params</span><span class="p">[</span><span class="mi">20</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="n">previous_output_shape</span><span class="p">;</span>
<span class="linenos">55</span>
<span class="linenos">56</span><span class="w"> </span><span class="c1">// 调用 Affine</span>
<span class="hll"><span class="linenos">57</span><span class="w"> </span><span class="n">fp_affine_p</span><span class="p">(</span><span class="n">params</span><span class="p">);</span>
</span><span class="linenos">58</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="linenos">59</span><span class="p">}</span>
</pre></div>
</div>
</div></blockquote>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="onehot.html" class="btn btn-neutral float-left" title="OneHot" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="assign.html" class="btn btn-neutral float-right" title="Assign" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025 - 2026, NUDT-674。</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>