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

556 lines
83 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">
<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>GRU &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" />
<link rel="stylesheet" type="text/css" href="../../_static/pageviews.css?v=ff0ce7dc" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></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="HashtableLookup" href="hashtablelookup.html" />
<link rel="prev" title="GroupNormFusion" href="groupnormfusion.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 class="current">
<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 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="dsplib_index.html">DSP Library C API Reference</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="abs.html">Abs</a></li>
<li class="toctree-l3"><a class="reference internal" href="abs_grad.html">AbsGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="activation.html">Activation</a></li>
<li class="toctree-l3"><a class="reference internal" href="activation_grad.html">ActivationGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="adam.html">Adam</a></li>
<li class="toctree-l3"><a class="reference internal" href="adamweightdecay.html">AdamWeightDecay</a></li>
<li class="toctree-l3"><a class="reference internal" href="adder.html">AdderFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="add.html">AddFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="add_grad.html">AddGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="addn.html">AddN</a></li>
<li class="toctree-l3"><a class="reference internal" href="affine.html">Affine</a></li>
<li class="toctree-l3"><a class="reference internal" href="all.html">All</a></li>
<li class="toctree-l3"><a class="reference internal" href="allgather.html">AllGather</a></li>
<li class="toctree-l3"><a class="reference internal" href="apply_momentum.html">ApplyMomentum</a></li>
<li class="toctree-l3"><a class="reference internal" href="argmax.html">Argmax</a></li>
<li class="toctree-l3"><a class="reference internal" href="argmin.html">Argmin</a></li>
<li class="toctree-l3"><a class="reference internal" href="assert.html">Assert</a></li>
<li class="toctree-l3"><a class="reference internal" href="assign.html">Assign</a></li>
<li class="toctree-l3"><a class="reference internal" href="assignadd.html">AssignAdd</a></li>
<li class="toctree-l3"><a class="reference internal" href="attention.html">Attention</a></li>
<li class="toctree-l3"><a class="reference internal" href="audio_spectrogram.html">AudioSpectrogram</a></li>
<li class="toctree-l3"><a class="reference internal" href="avgpooling.html">Avgpooling</a></li>
<li class="toctree-l3"><a class="reference internal" href="avg_pool_grad.html">AvgPoolGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="batchnorm.html">BatchNorm</a></li>
<li class="toctree-l3"><a class="reference internal" href="batchnormgrad.html">Batchnormgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="batch_to_space.html">BatchToSpace</a></li>
<li class="toctree-l3"><a class="reference internal" href="batchtospacend.html">BatchToSpaceND</a></li>
<li class="toctree-l3"><a class="reference internal" href="biasadd.html">Biasadd</a></li>
<li class="toctree-l3"><a class="reference internal" href="biasaddgrad.html">Biasaddgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="binarycrossentropy.html">Binarycrossentropy</a></li>
<li class="toctree-l3"><a class="reference internal" href="binary_cross_entropy_grad.html">BinaryCrossEntropyGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="broadcastto.html">BroadcastTo</a></li>
<li class="toctree-l3"><a class="reference internal" href="cast.html">Cast</a></li>
<li class="toctree-l3"><a class="reference internal" href="ceil.html">Ceil</a></li>
<li class="toctree-l3"><a class="reference internal" href="clip.html">Clip</a></li>
<li class="toctree-l3"><a class="reference internal" href="concat.html">Concat</a></li>
<li class="toctree-l3"><a class="reference internal" href="constant_of_shape.html">ConstantOfShape</a></li>
<li class="toctree-l3"><a class="reference internal" href="conv2d.html">Conv2DFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="conv2d_transpose.html">Conv2dTranspose</a></li>
<li class="toctree-l3"><a class="reference internal" href="conv2dbackpropfilterfusion.html">Conv2DBackpropFilterFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="conv2dbackpropinputfusion.html">Conv2DBackpropInputFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="cos.html">Cos</a></li>
<li class="toctree-l3"><a class="reference internal" href="crop.html">Crop</a></li>
<li class="toctree-l3"><a class="reference internal" href="crop_and_resize.html">CropAndResize</a></li>
<li class="toctree-l3"><a class="reference internal" href="cumsum.html">Cumsum</a></li>
<li class="toctree-l3"><a class="reference internal" href="customextractfeatures.html">CustomExtractFeatures</a></li>
<li class="toctree-l3"><a class="reference internal" href="customnormalize.html">Customnormalize</a></li>
<li class="toctree-l3"><a class="reference internal" href="custompredict.html">CustomPredict</a></li>
<li class="toctree-l3"><a class="reference internal" href="deconvgradfilter.html">DeconvGradFilter</a></li>
<li class="toctree-l3"><a class="reference internal" href="depthtospace.html">DepthToSpace</a></li>
<li class="toctree-l3"><a class="reference internal" href="detection_post_process.html">DetectionPostProcess</a></li>
<li class="toctree-l3"><a class="reference internal" href="div.html">DivFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="divgrad.html">Divgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="dropout.html">Dropout</a></li>
<li class="toctree-l3"><a class="reference internal" href="dropoutgrad.html">Dropoutgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="dynamic_quant.html">DynamicQuant</a></li>
<li class="toctree-l3"><a class="reference internal" href="eltwise.html">Eltwise</a></li>
<li class="toctree-l3"><a class="reference internal" href="elu.html">Elu</a></li>
<li class="toctree-l3"><a class="reference internal" href="embeddinglookup.html">EmbeddingLookup</a></li>
<li class="toctree-l3"><a class="reference internal" href="equal.html">Equal</a></li>
<li class="toctree-l3"><a class="reference internal" href="erf.html">Erf</a></li>
<li class="toctree-l3"><a class="reference internal" href="expand_dims.html">ExpandDims</a></li>
<li class="toctree-l3"><a class="reference internal" href="expfusion.html">ExpFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="fake_quant_with_min_max_vars.html">FakeQuantWithMinMaxVars</a></li>
<li class="toctree-l3"><a class="reference internal" href="fake_quant_with_min_max_vars_per_channel.html">FakeQuantWithMinMaxVarsPerChannel</a></li>
<li class="toctree-l3"><a class="reference internal" href="fftimag.html">FFTImag</a></li>
<li class="toctree-l3"><a class="reference internal" href="fftreal.html">FFTReal</a></li>
<li class="toctree-l3"><a class="reference internal" href="fill.html">Fill</a></li>
<li class="toctree-l3"><a class="reference internal" href="fillv2.html">FillV2</a></li>
<li class="toctree-l3"><a class="reference internal" href="flatten.html">Flatten</a></li>
<li class="toctree-l3"><a class="reference internal" href="flattengrad.html">FlattenGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="floor.html">Floor</a></li>
<li class="toctree-l3"><a class="reference internal" href="floordiv.html">FloorDiv</a></li>
<li class="toctree-l3"><a class="reference internal" href="floor_mod.html">FloorMod</a></li>
<li class="toctree-l3"><a class="reference internal" href="formattranspose.html">FormatTranspose</a></li>
<li class="toctree-l3"><a class="reference internal" href="fullconnection.html">FullConnection</a></li>
<li class="toctree-l3"><a class="reference internal" href="fusedbatchnorm.html">FusedBatchNorm</a></li>
<li class="toctree-l3"><a class="reference internal" href="gather.html">Gather</a></li>
<li class="toctree-l3"><a class="reference internal" href="gatherd.html">GatherD</a></li>
<li class="toctree-l3"><a class="reference internal" href="gather_nd.html">GatherNd</a></li>
<li class="toctree-l3"><a class="reference internal" href="glu.html">GLU</a></li>
<li class="toctree-l3"><a class="reference internal" href="greater.html">Greater</a></li>
<li class="toctree-l3"><a class="reference internal" href="greater_equal.html">GreaterEqual</a></li>
<li class="toctree-l3"><a class="reference internal" href="groupnormfusion.html">GroupNormFusion</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">GRU</a></li>
<li class="toctree-l3"><a class="reference internal" href="hashtablelookup.html">HashtableLookup</a></li>
<li class="toctree-l3"><a class="reference internal" href="instancenorm.html">InstanceNorm</a></li>
<li class="toctree-l3"><a class="reference internal" href="invert_permutation.html">InvertPermutation</a></li>
<li class="toctree-l3"><a class="reference internal" href="isfinite.html">Isfinite</a></li>
<li class="toctree-l3"><a class="reference internal" href="l2norm.html">L2norm</a></li>
<li class="toctree-l3"><a class="reference internal" href="layernormfusion.html">LayerNormFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="layernormgrad.html">Layernormgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="leaky_relu.html">LeakyReLu</a></li>
<li class="toctree-l3"><a class="reference internal" href="less.html">Less</a></li>
<li class="toctree-l3"><a class="reference internal" href="less_equal.html">LessEqual</a></li>
<li class="toctree-l3"><a class="reference internal" href="linspace.html">LinSpace</a></li>
<li class="toctree-l3"><a class="reference internal" href="log.html">Log</a></li>
<li class="toctree-l3"><a class="reference internal" href="log1p.html">Log1p</a></li>
<li class="toctree-l3"><a class="reference internal" href="log_grad.html">LogGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="logical_and.html">LogicalAnd</a></li>
<li class="toctree-l3"><a class="reference internal" href="logical_not.html">LogicalNot</a></li>
<li class="toctree-l3"><a class="reference internal" href="logical_or.html">LogicalOr</a></li>
<li class="toctree-l3"><a class="reference internal" href="logsoftmax.html">LogSoftmax</a></li>
<li class="toctree-l3"><a class="reference internal" href="lpnormalization.html">LpNormalization</a></li>
<li class="toctree-l3"><a class="reference internal" href="lrn.html">Lrn</a></li>
<li class="toctree-l3"><a class="reference internal" href="lsh_projection.html">LshProjection</a></li>
<li class="toctree-l3"><a class="reference internal" href="lstm.html">LSTM</a></li>
<li class="toctree-l3"><a class="reference internal" href="lstmgrad.html">LstmGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="lstmgraddata.html">LstmGradData</a></li>
<li class="toctree-l3"><a class="reference internal" href="lstmgradweight.html">LstmGradWeight</a></li>
<li class="toctree-l3"><a class="reference internal" href="matmul_fusion.html">MatMulFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="maximum.html">Maximum</a></li>
<li class="toctree-l3"><a class="reference internal" href="maximumgrad.html">Maximumgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="maxpool_fusion.html">MaxPoolFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="maxpool_grad.html">MaxPoolGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="mfcc.html">MFCC</a></li>
<li class="toctree-l3"><a class="reference internal" href="minimum.html">Minimum</a></li>
<li class="toctree-l3"><a class="reference internal" href="minimumgrad.html">Minimumgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="mod.html">Mod</a></li>
<li class="toctree-l3"><a class="reference internal" href="mul.html">MulFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="mulgrad.html">Mulgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="neg.html">Neg</a></li>
<li class="toctree-l3"><a class="reference internal" href="neg_grad.html">NegGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="nllloss.html">NLLLoss</a></li>
<li class="toctree-l3"><a class="reference internal" href="nlllossgrad.html">NLLLossGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="non_max_suppression.html">NonMaxSuppression</a></li>
<li class="toctree-l3"><a class="reference internal" href="nonzero.html">NonZero</a></li>
<li class="toctree-l3"><a class="reference internal" href="not_equal.html">NotEqual</a></li>
<li class="toctree-l3"><a class="reference internal" href="onehot.html">OneHot</a></li>
<li class="toctree-l3"><a class="reference internal" href="ones_like.html">OnesLike</a></li>
<li class="toctree-l3"><a class="reference internal" href="padfusion.html">PadFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="power_grad.html">PowerGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="pow_fusion.html">PowFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="prelufusion.html">PReLUFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="priorbox.html">Priorbox</a></li>
<li class="toctree-l3"><a class="reference internal" href="quantdtypecast.html">QuantDTypeCast</a></li>
<li class="toctree-l3"><a class="reference internal" href="ragged_range.html">RaggedRange</a></li>
<li class="toctree-l3"><a class="reference internal" href="random_normal.html">RandomNormal</a></li>
<li class="toctree-l3"><a class="reference internal" href="random_standard_normal.html">RandomStandardNormal</a></li>
<li class="toctree-l3"><a class="reference internal" href="range.html">Range</a></li>
<li class="toctree-l3"><a class="reference internal" href="rank.html">Rank</a></li>
<li class="toctree-l3"><a class="reference internal" href="real_div.html">RealDiv</a></li>
<li class="toctree-l3"><a class="reference internal" href="reciprocal.html">Reciprocal</a></li>
<li class="toctree-l3"><a class="reference internal" href="reduce.html">Reduce</a></li>
<li class="toctree-l3"><a class="reference internal" href="reducescatter.html">ReduceScatter</a></li>
<li class="toctree-l3"><a class="reference internal" href="reshape.html">Reshape</a></li>
<li class="toctree-l3"><a class="reference internal" href="resize.html">Resize</a></li>
<li class="toctree-l3"><a class="reference internal" href="resizegrad.html">Resizegrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="reverse_sequence.html">ReverseSequence</a></li>
<li class="toctree-l3"><a class="reference internal" href="reversev2.html">ReverseV2</a></li>
<li class="toctree-l3"><a class="reference internal" href="rfft.html">RFFT</a></li>
<li class="toctree-l3"><a class="reference internal" href="roipooling.html">ROIPooling</a></li>
<li class="toctree-l3"><a class="reference internal" href="round.html">Round</a></li>
<li class="toctree-l3"><a class="reference internal" href="rsqrt.html">Rsqrt</a></li>
<li class="toctree-l3"><a class="reference internal" href="rsqrt_grad.html">RsqrtGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="scale_fusion.html">ScaleFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="scatter_elements.html">ScatterElements</a></li>
<li class="toctree-l3"><a class="reference internal" href="scatter_nd.html">ScatterNd</a></li>
<li class="toctree-l3"><a class="reference internal" href="scatter_nd_update.html">ScatterNdUpdate</a></li>
<li class="toctree-l3"><a class="reference internal" href="select.html">Select</a></li>
<li class="toctree-l3"><a class="reference internal" href="sgd.html">SGD</a></li>
<li class="toctree-l3"><a class="reference internal" href="shape.html">Shape</a></li>
<li class="toctree-l3"><a class="reference internal" href="sigmoidcrossentropywithlogits.html">SigmoidCrossEntropyWithLogits</a></li>
<li class="toctree-l3"><a class="reference internal" href="sigmoidcrossentropywithlogitsgrad.html">SigmoidCrossEntropyWithLogitsGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="sin.html">Sin</a></li>
<li class="toctree-l3"><a class="reference internal" href="size.html">Size</a></li>
<li class="toctree-l3"><a class="reference internal" href="skipgram.html">Skipgram</a></li>
<li class="toctree-l3"><a class="reference internal" href="slice.html">SliceFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="smooth1loss.html">SmoothL1Loss</a></li>
<li class="toctree-l3"><a class="reference internal" href="smoothl1lossgrad.html">Smoothl1lossgrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="softmax.html">Softmax</a></li>
<li class="toctree-l3"><a class="reference internal" href="softmax_cross_entropy_with_logits.html">SoftmaxCrossEntropyWithLogits</a></li>
<li class="toctree-l3"><a class="reference internal" href="spacetobatch.html">SpaceToBatch</a></li>
<li class="toctree-l3"><a class="reference internal" href="spacetobatchnd.html">SpaceToBatchND</a></li>
<li class="toctree-l3"><a class="reference internal" href="spacetodepth.html">SpaceToDepth</a></li>
<li class="toctree-l3"><a class="reference internal" href="sparse_fill_empty_rows.html">SparseFillEmptyRows</a></li>
<li class="toctree-l3"><a class="reference internal" href="sparse_reshape.html">SparseReshape</a></li>
<li class="toctree-l3"><a class="reference internal" href="sparsesegmentsum.html">Sparsesegmentsum</a></li>
<li class="toctree-l3"><a class="reference internal" href="sparse_softmax_cross_entropy_with_logits.html">SparseSoftmaxCrossEntropyWithLogits</a></li>
<li class="toctree-l3"><a class="reference internal" href="sparse_to_dense.html">SparseToDense</a></li>
<li class="toctree-l3"><a class="reference internal" href="splice.html">Splice</a></li>
<li class="toctree-l3"><a class="reference internal" href="split.html">Split</a></li>
<li class="toctree-l3"><a class="reference internal" href="split_with_overlap.html">SplitWithOverlap</a></li>
<li class="toctree-l3"><a class="reference internal" href="sqrt.html">Sqrt</a></li>
<li class="toctree-l3"><a class="reference internal" href="sqrt_grad.html">SqrtGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="square.html">Square</a></li>
<li class="toctree-l3"><a class="reference internal" href="square_difference.html">SquareDifference</a></li>
<li class="toctree-l3"><a class="reference internal" href="squeeze.html">Squeeze</a></li>
<li class="toctree-l3"><a class="reference internal" href="stack.html">Stack</a></li>
<li class="toctree-l3"><a class="reference internal" href="stridedslice.html">Stridedslice</a></li>
<li class="toctree-l3"><a class="reference internal" href="stridedslicegrad.html">Stridedslicegrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="sub.html">SubFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="sub_grad.html">SubGrad</a></li>
<li class="toctree-l3"><a class="reference internal" href="switch.html">Switch</a></li>
<li class="toctree-l3"><a class="reference internal" href="switchlayer.html">Switchlayer</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorarray.html">Tensorarray</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorarrayread.html">Tensorarrayread</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorarraywrite.html">TensorarrayWrite</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorlist_from_tensor.html">TensorListFromTensor</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorlistgetitem.html">Tensorlistgetitem</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorlist_reserve.html">TensorListReserve</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorlistsetitem.html">Tensorlistsetitem</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensorlist_stack.html">TensorListStack</a></li>
<li class="toctree-l3"><a class="reference internal" href="tensor_scatter_add.html">TensorScatterAdd</a></li>
<li class="toctree-l3"><a class="reference internal" href="tile.html">Tile</a></li>
<li class="toctree-l3"><a class="reference internal" href="topkfusion.html">TopkFusion</a></li>
<li class="toctree-l3"><a class="reference internal" href="transpose.html">Transpose</a></li>
<li class="toctree-l3"><a class="reference internal" href="tril.html">Tril</a></li>
<li class="toctree-l3"><a class="reference internal" href="triu.html">Triu</a></li>
<li class="toctree-l3"><a class="reference internal" href="uniform_real.html">UniformReal</a></li>
<li class="toctree-l3"><a class="reference internal" href="unique.html">Unique</a></li>
<li class="toctree-l3"><a class="reference internal" href="unsortedsegmentsum.html">UnsortedSegmentSum</a></li>
<li class="toctree-l3"><a class="reference internal" href="unstack.html">Unstack</a></li>
<li class="toctree-l3"><a class="reference internal" href="unsqueeze.html">UnSqueeze</a></li>
<li class="toctree-l3"><a class="reference internal" href="where.html">Where</a></li>
<li class="toctree-l3"><a class="reference internal" href="zeroslike.html">ZerosLike</a></li>
<li class="toctree-l3"><a class="reference internal" href="call.html">Call</a></li>
<li class="toctree-l3"><a class="reference internal" href="custom.html">Custom</a></li>
<li class="toctree-l3"><a class="reference internal" href="depend.html">Depend</a></li>
<li class="toctree-l3"><a class="reference internal" href="genop.html">GenOp</a></li>
<li class="toctree-l3"><a class="reference internal" href="partialfusion.html">PartialFusion</a></li>
</ul>
</li>
</ul>
</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">GRU</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/functionlib/dsplib/gru.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="gru">
<h1>GRU<a class="headerlink" href="#gru" title="此标题的永久链接"></a></h1>
<p>将多层门控循环单元 (GRU) RNN 应用于输入序列。</p>
<p>GRU 网络模型中有两个门:更新门和重置门。将两个连续的时间节点表示为 <span class="math notranslate nohighlight">\(t - 1\)</span><span class="math notranslate nohighlight">\(t\)</span>。给定一个在时刻 <span class="math notranslate nohighlight">\(t\)</span> 的输入 <span class="math notranslate nohighlight">\(x_t\)</span>,一个隐藏状态 <span class="math notranslate nohighlight">\(h_{t-1}\)</span>,在时刻 <span class="math notranslate nohighlight">\(t\)</span> 的更新门和重置门使用门控制机制计算。更新门 <span class="math notranslate nohighlight">\(z_t\)</span> 用于控制前一时刻的状态信息被带入到当前状态中的程度,重置门 <span class="math notranslate nohighlight">\(r_t\)</span> 控制前一状态有多少信息被写入到当前候选集 <span class="math notranslate nohighlight">\(n_t\)</span></p>
<p>对于输入序列中的每个元素,每一层计算以下函数:</p>
<div class="math notranslate nohighlight">
\begin{align*}
r_t &amp;= \sigma(W_{ir}x_t + b_{ir} + W_{hr}h_{(t-1)} + b_{hr}) \\
z_t &amp;= \sigma(W_{iz}x_t + b_{iz} + W_{hz}h_{(t-1)} + b_{hz}) \\
n_t &amp;= \tanh(W_{in}x_t + b_{in} + r_t \odot (W_{hn}h_{(t-1)} + b_{hn})) \\
h_t &amp;= (1-z_t) \odot n_t + z_t \odot h_{(t-1)}
\end{align*}</div><p>其中 <span class="math notranslate nohighlight">\(\sigma\)</span> 是 sigmoid 激活函数,<span class="math notranslate nohighlight">\(\odot\)</span> 是 Hadamard 积(逐元素乘积)。<span class="math notranslate nohighlight">\(W, b\)</span> 是公式中输出和输入之间的可学习权重。例如,<span class="math notranslate nohighlight">\(W_{ir}, b_{ir}\)</span> 是用于将输入 <span class="math notranslate nohighlight">\(x_t\)</span> 转换为 <span class="math notranslate nohighlight">\(r_t\)</span> 的权重和偏置。</p>
<p>注意,本算子中候选门 <span class="math notranslate nohighlight">\(n_t\)</span> 的计算与原始论文和Mindspore框架略有不同。在原始实现中<span class="math notranslate nohighlight">\(r_t\)</span> 和上一隐藏状态 <span class="math notranslate nohighlight">\(h_{(t-1)}\)</span> 之间的 Hadamard 积 (<span class="math notranslate nohighlight">\(\odot\)</span>) 在与权重矩阵 <span class="math notranslate nohighlight">\(W\)</span> 相乘和加上偏置之前进行:</p>
<div class="math notranslate nohighlight">
\[n_t = \tanh(W_{in}x_t + b_{in} + W_{hn}(r_t \odot h_{(t-1)}) + b_{hn})\]</div>
<p>本算子采用 PyTorch 实现方式,是在 <span class="math notranslate nohighlight">\(W_{hn}h_{(t-1)}\)</span> 之后完成的:</p>
<div class="math notranslate nohighlight">
\[n_t = \tanh(W_{in}x_t + b_{in} + r_t \odot (W_{hn}h_{(t-1)} + b_{hn}))\]</div>
<dl class="simple">
<dt>输入:</dt><dd><ul class="simple">
<li><p><strong>input</strong> - 输入数据的地址。</p></li>
<li><p><strong>weight_g</strong> - 可学习的输入-隐藏权重的地址。</p></li>
<li><p><strong>weight_r</strong> - 可学习的隐藏-隐藏权重的地址。</p></li>
<li><p><strong>input_bias</strong> - 可学习的输入-隐藏偏置的地址。</p></li>
<li><p><strong>state_bias</strong> - 可学习的隐藏-隐藏偏置的地址。</p></li>
<li><p><strong>hidden_state</strong> - 初始隐藏状态的地址。</p></li>
<li><p><strong>buffer</strong> - 用于存储中间计算结果。</p></li>
<li><p><strong>gru_param</strong> - 算子计算所需参数的结构体。其各成员见下述。</p></li>
<li><p><strong>core_mask</strong> - 核掩码。</p></li>
</ul>
</dd>
</dl>
<p><strong>GruParameter定义</strong></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">GruParameter</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 2</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_size_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入input中预期特征的数量</span>
<span class="linenos"> 3</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hidden_size_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 隐藏状态h中的特征数量</span>
<span class="linenos"> 4</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">seq_len_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入batch中每个序列的长度</span>
<span class="linenos"> 5</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">batch_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 总批次数</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">output_step_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 每次循环中output步长</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bidirectional_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 是否为双向GRU</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_row_align_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入行对齐值</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_col_align_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 输入列对齐值</span>
<span class="linenos">10</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">state_row_align_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 隐藏状态行对齐值</span>
<span class="linenos">11</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">state_col_align_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 隐藏状态列对齐值</span>
<span class="linenos">12</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">check_seq_len_</span><span class="p">;</span><span class="w"> </span><span class="c1">// 进行计算的序列长度</span>
<span class="linenos">13</span><span class="p">}</span><span class="w"> </span><span class="n">GruParameter</span><span class="p">;</span>
</pre></div>
</div>
<dl class="simple">
<dt>输出:</dt><dd><ul class="simple">
<li><p><strong>output</strong> - 输出地址。</p></li>
<li><p><strong>hidden_state</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>
<dl class="c function">
<dt class="sig sig-object c" id="c.i8_Gru_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_Gru_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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_Gru_s" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.hp_Gru_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_Gru_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.hp_Gru_s" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.fp_Gru_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_Gru_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.fp_Gru_s" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<p><strong>C调用示例</strong></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">void</span><span class="w"> </span><span class="nf">TestGruSMCFp32</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">check_seq_len</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">seq_len</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">batch_size</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_size</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hidden_size</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"> 2</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">get_core_id</span><span class="p">();</span>
<span class="linenos"> 3</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"> 4</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">core_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"> 5</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88000000</span><span class="p">;</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88100000</span><span class="p">;</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">weight_g</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88200000</span><span class="p">;</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">weight_r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88300000</span><span class="p">;</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">input_bias</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88400000</span><span class="p">;</span>
<span class="linenos">10</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">state_bias</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88500000</span><span class="p">;</span>
<span class="linenos">11</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">hidden_state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88600000</span><span class="p">;</span>
<span class="linenos">12</span><span class="w"> </span><span class="kt">float</span><span class="o">**</span><span class="w"> </span><span class="n">buffer</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">0x88700000</span><span class="p">;</span>
<span class="linenos">13</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">output_hidden_state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88800000</span><span class="p">;</span>
<span class="linenos">14</span><span class="w"> </span><span class="n">GruParameter</span><span class="o">*</span><span class="w"> </span><span class="n">param</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">GruParameter</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88900000</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">hidden_state_batch</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">16</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">num_directions</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">17</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">bidirectional</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">18</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">19</span><span class="w"> </span><span class="n">num_directions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num_directions</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">20</span><span class="w"> </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">input_col_align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</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">state_col_align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">;</span>
<span class="linenos">23</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">24</span><span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="n">output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">));</span>
<span class="linenos">25</span><span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="n">check_output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">));</span>
<span class="linenos">26</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88A00000</span><span class="p">;</span>
<span class="linenos">27</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88B00000</span><span class="p">;</span>
<span class="linenos">28</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88C00000</span><span class="p">;</span>
<span class="linenos">29</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x88D00000</span><span class="p">;</span>
<span class="linenos">30</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">batch_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">batch_size</span><span class="p">;</span>
<span class="linenos">31</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">bidirectional_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">;</span>
<span class="linenos">32</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">hidden_size_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">;</span>
<span class="linenos">33</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">input_col_align_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input_col_align</span><span class="p">;</span>
<span class="linenos">34</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">input_size_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input_size</span><span class="p">;</span>
<span class="linenos">35</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">output_step_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">num_directions</span><span class="p">;</span>
<span class="linenos">36</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">seq_len_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">seq_len</span><span class="p">;</span>
<span class="linenos">37</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">state_col_align_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state_col_align</span><span class="p">;</span>
<span class="linenos">38</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">check_seq_len_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">check_seq_len</span><span class="p">;</span>
<span class="linenos">39</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">40</span><span class="w"> </span><span class="n">sys_bar</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">core_num</span><span class="p">);</span><span class="w"> </span><span class="c1">// 初始化参数完成后进行同步</span>
<span class="hll"><span class="linenos">41</span><span class="w"> </span><span class="n">fp_Gru_s</span><span class="p">(</span><span class="n">output</span><span class="p">,</span><span class="w"> </span><span class="n">input</span><span class="p">,</span><span class="w"> </span><span class="n">weight_g</span><span class="p">,</span><span class="w"> </span><span class="n">weight_r</span><span class="p">,</span><span class="w"> </span><span class="n">input_bias</span><span class="p">,</span><span class="w"> </span><span class="n">state_bias</span><span class="p">,</span><span class="w"> </span><span class="n">output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="n">param</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
</span><span class="linenos">42</span><span class="p">}</span>
<span class="linenos">43</span>
<span class="linenos">44</span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </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">check_seq_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </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">seq_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">47</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">48</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">49</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bidirectional</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">50</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">51</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="mb">0b1111</span><span class="p">;</span>
<span class="linenos">52</span><span class="w"> </span><span class="n">TestGruSMCFp32</span><span class="p">(</span><span class="n">check_seq_len</span><span class="p">,</span><span class="w"> </span><span class="n">seq_len</span><span class="p">,</span><span class="w"> </span><span class="n">batch_size</span><span class="p">,</span><span class="w"> </span><span class="n">input_size</span><span class="p">,</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
<span class="linenos">53</span><span class="p">}</span>
</pre></div>
</div>
<p><strong>私有存储版本:</strong></p>
<dl class="c function">
<dt class="sig sig-object c" id="c.i8_Gru_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_Gru_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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_Gru_p" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.hp_Gru_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_Gru_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.hp_Gru_p" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.fp_Gru_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_Gru_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_g</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">weight_r</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input_bias</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">state_bias</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">hidden_state</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">GruParameter</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">gru_param</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><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.fp_Gru_p" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<p><strong>C调用示例</strong></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">void</span><span class="w"> </span><span class="nf">TestGruL2Fp32</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">check_seq_len</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">seq_len</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">batch_size</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_size</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hidden_size</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"> 2</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10000000</span><span class="p">;</span><span class="w"> </span><span class="c1">// 私有存储版本地址设置在AM内</span>
<span class="linenos"> 3</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10004000</span><span class="p">;</span>
<span class="linenos"> 4</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">weight_g</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10008000</span><span class="p">;</span>
<span class="linenos"> 5</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">weight_r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x1000C000</span><span class="p">;</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">input_bias</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10010000</span><span class="p">;</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">state_bias</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10014000</span><span class="p">;</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">hidden_state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10018000</span><span class="p">;</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="kt">float</span><span class="o">**</span><span class="w"> </span><span class="n">buffer</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">0x1001C000</span><span class="p">;</span>
<span class="linenos">10</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">output_hidden_state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10020000</span><span class="p">;</span>
<span class="linenos">11</span><span class="w"> </span><span class="n">GruParameter</span><span class="o">*</span><span class="w"> </span><span class="n">param</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">GruParameter</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10024000</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">hidden_state_batch</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">13</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">num_directions</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">14</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">bidirectional</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">15</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">16</span><span class="w"> </span><span class="n">num_directions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num_directions</span><span class="w"> </span><span class="o">*</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="p">}</span>
<span class="linenos">18</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_col_align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</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">state_col_align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">;</span>
<span class="linenos">20</span><span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="n">output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">));</span>
<span class="linenos">21</span><span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="n">check_output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_state_batch</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">));</span>
<span class="linenos">22</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10030000</span><span class="p">;</span>
<span class="linenos">23</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10034000</span><span class="p">;</span>
<span class="linenos">24</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x10038000</span><span class="p">;</span>
<span class="linenos">25</span><span class="w"> </span><span class="n">buffer</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">void</span><span class="o">*</span><span class="p">)</span><span class="mh">0x1003C000</span><span class="p">;</span>
<span class="linenos">26</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">batch_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">batch_size</span><span class="p">;</span>
<span class="linenos">27</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">bidirectional_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">;</span>
<span class="linenos">28</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">hidden_size_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">;</span>
<span class="linenos">29</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">input_col_align_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input_col_align</span><span class="p">;</span>
<span class="linenos">30</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">input_size_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input_size</span><span class="p">;</span>
<span class="linenos">31</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">output_step_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">num_directions</span><span class="p">;</span>
<span class="linenos">32</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">seq_len_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">seq_len</span><span class="p">;</span>
<span class="linenos">33</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">state_col_align_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state_col_align</span><span class="p">;</span>
<span class="linenos">34</span><span class="w"> </span><span class="n">param</span><span class="o">-&gt;</span><span class="n">check_seq_len_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">check_seq_len</span><span class="p">;</span>
<span class="hll"><span class="linenos">35</span><span class="w"> </span><span class="n">fp_Gru_p</span><span class="p">(</span><span class="n">output</span><span class="p">,</span><span class="w"> </span><span class="n">input</span><span class="p">,</span><span class="w"> </span><span class="n">weight_g</span><span class="p">,</span><span class="w"> </span><span class="n">weight_r</span><span class="p">,</span><span class="w"> </span><span class="n">input_bias</span><span class="p">,</span><span class="w"> </span><span class="n">state_bias</span><span class="p">,</span><span class="w"> </span><span class="n">output_hidden_state</span><span class="p">,</span><span class="w"> </span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="n">param</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
</span><span class="linenos">36</span><span class="p">}</span>
<span class="linenos">37</span>
<span class="linenos">38</span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">39</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">check_seq_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">40</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">seq_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">41</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">batch_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">42</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">input_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="linenos">43</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bidirectional</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">44</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hidden_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </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">core_mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mb">0b0001</span><span class="p">;</span><span class="w"> </span><span class="c1">// 私有存储版本只能设置为一个核心启动</span>
<span class="linenos">46</span><span class="w"> </span><span class="n">TestGruL2Fp32</span><span class="p">(</span><span class="n">check_seq_len</span><span class="p">,</span><span class="w"> </span><span class="n">seq_len</span><span class="p">,</span><span class="w"> </span><span class="n">batch_size</span><span class="p">,</span><span class="w"> </span><span class="n">input_size</span><span class="p">,</span><span class="w"> </span><span class="n">bidirectional</span><span class="p">,</span><span class="w"> </span><span class="n">hidden_size</span><span class="p">,</span><span class="w"> </span><span class="n">core_mask</span><span class="p">);</span>
<span class="linenos">47</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">48</span><span class="p">}</span>
</pre></div>
</div>
</section>
</div>
</div>
<div class="pageviews-container">
访问量:<span id="busuanzi_page_uv"></span>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="groupnormfusion.html" class="btn btn-neutral float-left" title="GroupNormFusion" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="hashtablelookup.html" class="btn btn-neutral float-right" title="HashtableLookup" 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>
<script src="//cdn.busuanzi.cc/busuanzi/3.6.9/busuanzi.min.js" defer></script>
</body>
</html>