SetPadValue(ISASI)
产 品 支 持 情 况
功 能 说 明
设 置DataCopyPad需 要 填 充 的 数 值。支 持 的 通 路 如 下:
- GM->VECIN/GM->VECOUT
函 数 原 型
Text
template <typename T, TPosition pos = TPosition::MAX>
__aicore__ inline void SetPadValue(T paddingValue)
参 数 说 明
表 1 模 板 参 数 说 明
用 于 指 定DataCopyPad接 口 搬 运 过 程 中 从GM搬 运 数 据 到 哪 一 个 目 的 地 址,目 的 地 址 通 过 逻 辑 位 置 来 表 达。默 认 值 为TPosition::MAX,等 效 于TPosition::VECIN或TPosition::VECOUT。
|
表 2 参 数 说 明
DataCopyPad接 口 填 充 的 数 值,数 据 与DataCopyPad接 口 搬 运 的 数 据 类 型 一 致。 |
返 回 值 说 明
无
约 束 说 明
无
调 用 示 例
更 多 样 例 请 参 见DataCopyPad样 例。
Text
uint32_t m_n1 = 32;
uint32_t m_n2 = 31;
uint32_t m_n2Align = n2 % 32 == 0 ? n2 : (n2 / 32 + 1) * 32;
AscendC::LocalTensor<float> srcLocal = m_queInSrc.AllocTensor<float>();
AscendC::DataCopyExtParams dataCopyExtParams;
AscendC::DataCopyPadExtParams<float> padParams;
dataCopyExtParams.blockCount = m_n1; // Block个 数,拷 贝 的 的 次 数
dataCopyExtParams.blockLen = m_n2 * sizeof(float); // 一 次 拷 贝 多 少 个32B
dataCopyExtParams.srcStride = 0;
dataCopyExtParams.dstStride = 0;
padParams.isPad = true;
padParams.leftPadding = 0;
padParams.rightPadding = 1;
AscendC::SetPadValue((float)37); // 设 置Pad的 值 为37
AscendC::DataCopyPad(srcLocal, m_srcGlobal, dataCopyExtParams, padParams);
Text
输 入 数 据(srcGm, shape = [32, 31]):[[1, 1, 1, ..., 1], [1, 1, 1, ..., 1], ... , [1, 1, 1, ..., 1]]
输 出 数 据(dstGm, shape = [32, 32]):[[1, 1, 1, ..., 1, 37], [1, 1, 1, ..., 1, 37], ... , [1, 1, 1, ..., 1, 37]]
Text
// 对 于 不 支 持 使 用 立 即 数 进 行 赋 值 和 初 始 化 的 数 据 类 型,如 下 是 一 个 输 入 类 型bfloat16_t的 示 例:
AscendC::SetPadValue(m_srcGlobal.GetValue(0));
AscendC::DataCopyPad(srcLocal, m_srcGlobal, dataCopyExtParams, padParams);
输 入 数 据(srcGm, shape = [32, 31]):[[1, 2, 3, ..., 31], [1, 2, 3, ..., 31], ... , [1, 2, 3, ..., 31]]
输 出 数 据(dstGm, shape = [32, 32]):[[1, 2, 3, ..., 31, 1], [1, 2, 3, ..., 31, 1], ... , [1, 2, 3, ..., 31, 1]]