Cast
产 品 支 持 情 况
功 能 说 明
根 据 源 操 作 数 和 目 的 操 作 数tensor的 数 据 类 型 进 行 精 度 转 换。
函 数 原 型
tensor前n个 数 据 计 算。
C++template <typename T, typename U> __aicore__ inline void Cast(const LocalTensor<T>& dst, const LocalTensor<U>& src, const RoundMode& roundMode, const uint32_t count)tensor高 维 切 分 计 算。
mask逐bit模 式。
C++template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Cast(const LocalTensor<T>& dst, const LocalTensor<U>& src, const RoundMode& roundMode, const uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)mask连 续 模 式。
C++template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Cast(const LocalTensor<T>& dst, const LocalTensor<U>& src, const RoundMode& roundMode, const uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
参 数 说 明
表 1 模 板 参 数 说 明
| 参 数 名 | 描 述 |
|---|---|
| T | 输 出Tensor的 数 据 类 型。 |
| U | 输 入Tensor的 数 据 类 型。 |
| isSetMask | 是 否 在 接 口 内 部 设 置mask,默 认 为true。 •true,表 示 在 接 口 内 部 设 置mask。 •false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,本 接 口 入 参 中 的mask值 必 须 设 置 为 占 位 符MASK_PLACEHOLDER。 |
表 2 参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| dst | 输 出 | 目 的 操 作 数。 类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 |
| src | 输 入 | 源 操 作 数。 类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 |
| roundMode | 输 入 | 精 度 转 换 处 理 模 式,类 型 是RoundMode。 RoundMode为 枚 举 类 型,用 以 控 制 精 度 转 换 处 理 模 式,可 参 考精 度 转 换 规 则。RoundMode取 值 说 明 请 参 考RoundMode取 值 说 明。 |
| count | 输 入 | 参 与 计 算 的 元 素 个 数。 注:参 数 取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,能 够 处 理 的 元 素 个 数 最 大 值 不 同,最 大 处 理 的 数 据 量 不 能 超 过UB大 小 限 制。 |
| mask/mask[] | 输 入 | mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。 注 意:数 据 类 型 转 换 的mask会 按 照 输 入 和 输 出 类 型 中sizeof(dtype)较 大 的 来 筛 选。 设 置 详 见掩 码 操 作。 |
| repeatTime | 输 入 | 重 复 迭 代 次 数。 矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。 关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分。 |
| repeatParams | 输 入 | 控 制 操 作 数 地 址 步 长 的 参 数。UnaryRepeatParams类 型,包 含 操 作 数 相 邻 迭 代 间 相 同DataBlock的 地 址 步 长,操 作 数 同 一 迭 代 内 不 同DataBlock的 地 址 步 长 等 参 数。 相 邻 迭 代 间 的 地 址 步 长 参 数 说 明 请 参 考repeatStride;同 一 迭 代 内DataBlock的 地 址 步 长 参 数 说 明 请 参 考dataBlockStride。 |
RoundMode取 值 说 明
枚 举 类 型 具 体 定 义 为:
enum class RoundMode {
CAST_NONE = 0, // 在 转 换 有 精 度 损 失 时 表 示CAST_RINT模 式,不 涉 及 精 度 损 失 时 表 示 不 舍 入
CAST_RINT, // rint,四 舍 六 入 五 成 双 舍 入
CAST_FLOOR, // floor,向 负 无 穷 舍 入
CAST_CEIL, // ceil,向 正 无 穷 舍 入
CAST_ROUND, // round,四 舍 五 入 舍 入
CAST_TRUNC, // trunc,向 零 舍 入
CAST_ODD, // Von Neumann rounding,最 近 邻 奇 数 舍 入
CAST_HYBRID, // hybrid,目 前 特 指 输 出 结 果 是hifloat8_t数 据 时,会 用 到 的 一 种 随 机 舍 入
};
注:仅 在 支 持hifloat8_t数 据 类 型 的 硬 件 平 台,才 支 持CAST_HYBRID转 换 模 式。
数 据 类 型
不 同 数 据 类 型 转 换 支 持 的 舍 入 模 式 不 同,可 参 考精 度 转 换 规 则。
表 Ascend 950PR/Ascend 950DT支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int4b_t | int16_t | CAST_NONE |
| int4b_t | half | CAST_NONE |
| int4b_t | bfloat16_t | CAST_NONE |
| int8_t | int16_t | CAST_NONE |
| int8_t | half | CAST_NONE |
| int8_t | int32_t | CAST_NONE |
| uint8_t | uint16_t | CAST_NONE |
| uint8_t | half | CAST_NONE |
| uint8_t | uint32_t | CAST_NONE |
| fp4x2_e2m1_t | bfloat16_t | CAST_NONE |
| fp4x2_e1m2_t | bfloat16_t | CAST_NONE |
| hifloat8_t | half | CAST_NONE |
| hifloat8_t | float | CAST_NONE |
| fp8_e5m2_t | float | CAST_NONE |
| fp8_e4m3fn_t | float | CAST_NONE |
| int16_t | int4b_t | CAST_NONE |
| int16_t | uint8_t | CAST_NONE |
| int16_t | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int16_t | int32_t | CAST_NONE |
| int16_t | uint32_t | CAST_NONE |
| int16_t | float | CAST_NONE |
| uint16_t | uint8_t | CAST_NONE |
| uint16_t | uint32_t | CAST_NONE |
| half | int4b_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | int8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | uint8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | hifloat8_t | CAST_ROUND/CAST_HYBRID |
| half | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| bfloat16_t | fp4x2_e2m1_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | fp4x2_e1m2_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | float | CAST_NONE |
| int32_t | uint8_t | CAST_NONE |
| int32_t | int16_t | CAST_NONE |
| int32_t | uint16_t | CAST_NONE |
| int32_t | half | roundMode不 生 效,与SetDeqScale(half scale)接 口 配 合 使 用。 |
| int32_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int32_t | int64_t | CAST_NONE |
| uint32_t | uint8_t | CAST_NONE |
| uint32_t | int16_t | CAST_NONE |
| uint32_t | uint16_t | CAST_NONE |
| float | hifloat8_t | CAST_ROUND/CAST_HYBRID |
| float | fp8_e5m2_t | CAST_RINT |
| float | fp8_e4m3fn_t | CAST_RINT |
| float | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_ODD/CAST_NONE |
| float | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| complex32 | complex64 | CAST_NONE |
| int64_t | int32_t | CAST_NONE |
| int64_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int64_t | double | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| double | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| double | int32_t | CAST_TRUNC |
| double | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| double | int64_t | CAST_TRUNC |
| complex64 | complex32 | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_ODD/CAST_NONE |
| complex64 | complex64 | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int4b_t | half | CAST_NONE |
| int8_t | half | CAST_NONE |
| uint8_t | half | CAST_NONE |
| int16_t | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int16_t | float | CAST_NONE |
| half | int4b_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | uint8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| bfloat16_t | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | float | CAST_NONE |
| int32_t | int16_t | CAST_NONE |
| int32_t | half | roundMode不 生 效,与SetDeqScale(half scale)接 口 配 合 使 用。 |
| int32_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int32_t | int64_t | CAST_NONE |
| float | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_ODD/CAST_NONE |
| float | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int64_t | int32_t | CAST_NONE |
| int64_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int4b_t | half | CAST_NONE |
| int8_t | half | CAST_NONE |
| uint8_t | half | CAST_NONE |
| int16_t | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int16_t | float | CAST_NONE |
| half | int4b_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | uint8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| bfloat16_t | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | float | CAST_NONE |
| int32_t | int16_t | CAST_NONE |
| int32_t | half | roundMode不 生 效,与SetDeqScale(half scale)接 口 配 合 使 用。 |
| int32_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int32_t | int64_t | CAST_NONE |
| float | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_ODD/CAST_NONE |
| float | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int64_t | int32_t | CAST_NONE |
| int64_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Atlas 200I/500 A2 推 理 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int8_t | half | CAST_NONE |
| uint8_t | half | CAST_NONE |
| int16_t | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int16_t | float | CAST_NONE |
| half | int8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | uint8_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| bfloat16_t | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| bfloat16_t | float | CAST_NONE |
| int32_t | int16_t | CAST_NONE |
| int32_t | half | CAST_NONE |
| int32_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| int32_t | int64_t | CAST_NONE |
| float | int16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | half | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_ODD/CAST_NONE |
| float | bfloat16_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| int64_t | int32_t | CAST_NONE |
| int64_t | float | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Atlas 推 理 系 列 产 品AI Core支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int8_t | half | CAST_NONE |
| uint8_t | half | CAST_NONE |
| int16_t | half | CAST_NONE |
| half | int4b_t | CAST_NONE |
| half | int8_t | CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | uint8_t | CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int16_t | CAST_RINT |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| int32_t | int16_t | CAST_NONE |
| int32_t | half | roundMode不 生 效,与SetDeqScale(half scale)接 口 配 合 使 用。 |
| int32_t | float | CAST_NONE |
| float | half | CAST_ODD/CAST_NONE |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Atlas 训 练 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| int8_t | half | CAST_NONE |
| uint8_t | half | CAST_NONE |
| int16_t | half | CAST_NONE |
| half | int8_t | CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | uint8_t | CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC/CAST_NONE |
| half | int32_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
| half | float | CAST_NONE |
| int32_t | float | CAST_NONE |
| float | half | CAST_ODD/CAST_NONE |
| float | int64_t | CAST_RINT/CAST_FLOOR/CAST_CEIL/CAST_ROUND/CAST_TRUNC |
表 Kirin X90支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| half | uint8_t | CAST_CEIL |
| half | int32_t | CAST_FLOOR |
| int32_t | float | CAST_CEIL |
| float | bfloat16_t | CAST_ROUND |
| bfloat16_t | float | CAST_NONE |
表 Kirin 9030支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | dst数 据 类 型 | 支 持 的roundMode |
|---|---|---|
| half | uint8_t | CAST_CEIL |
| half | int32_t | CAST_FLOOR |
| int32_t | float | CAST_CEIL |
| float | bfloat16_t | CAST_ROUND |
| bfloat16_t | float | CAST_NONE |
返 回 值 说 明
无。
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束。特 别 地,对 于 长 度 较 小 的 数 据 类 型 转 换 为 长 度 较 大 的 数 据 类 型 时,地 址 重 叠 可 能 会 导 致 结 果 错 误。
当 源 操 作 数 和 目 的 操 作 数 位 数 不 同 时,计 算 输 入 参 数 以 数 据 类 型 的 字 节 较 大 的 为 准。例 如,源 操 作 数 为half类 型,目 的 操 作 数 为int32_t类 型 时,每 次 迭 代 最 多 操 作64个 元 素,为 保 证 输 出 和 输 入 是 连 续 的,dstRepStride应 设 置 为8,srcRepStride应 设 置 为4。
当dst或src为int4b_t时,由 于 一 个int4b_t只 占 半 个 字 节,故 申 请Tensor空 间 时,只 需 申 请 相 同 数 量 的int8_t数 据 空 间 的 一 半。host侧 目 前 暂 不 支 持int4b_t,故 在 申 请int4b_t类 型 的tensor时,应 先 申 请 一 个 类 型 为int8_t的tensor,再 用Reinterpretcast接 口 转 化 为int4b_t类 型 的tensor,接 着 调 用Cast指 令。
当dst或src为int4b_t时,tensor高 维 切 分 计 算 接 口 的 连 续 模 式 的mask与tensor前n个 数 据 计 算 接 口 的count必 须 为 偶 数;对 于tensor高 维 切 分 计 算 接 口 的 逐bit模 式,对 应 同 一 字 节 的 相 邻 两 个 比 特 位 的 数 值 必 须 一 致,即0-1位 数 值 一 致,2-3位 数 值 一 致,4-5位 数 值 一 致,以 此 类 推。
int32_t到half数 据 类 型 的 转 换,设 置 舍 入 模 式 无 效,需 要 与SetDeqScale接 口 配 合 使 用。
- 针 对Ascend 950PR/Ascend 950DT,complex32/complex64/double数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。
调 用 示 例
本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。本 样 例 的srcLocal为half类 型,dstLocal为int32_t类 型,计 算mask时 以int32_t为 准。
如 果 您 需 要 运 行 样 例 代 码,完 整 的 调 用 样 例 请 参 考Cast样 例。
tensor高 维 切 分 计 算 样 例-mask连 续 模 式。
C++uint64_t mask = 256 / sizeof(int32_t); // repeatTime = 8, 64 elements one repeat, 512 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 8, srcRepStride = 4, no gap between repeats AscendC::Cast(dstLocal, srcLocal, AscendC::RoundMode::CAST_CEIL, mask, 8, { 1, 1, 8, 4 });tensor高 维 切 分 计 算 样 例-mask逐bit模 式。
C++uint64_t mask[2] = { 0, UINT64_MAX }; // repeatTime = 8, 64 elements one repeat, 512 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 8, srcRepStride = 4, no gap between repeats AscendC::Cast(dstLocal, srcLocal, AscendC::RoundMode::CAST_CEIL, mask, 8, { 1, 1, 8, 4 });tensor前n个 数 据 计 算 样 例。
C++uint32_t count = 512; // 参 与 计 算 的 元 素 个 数 AscendC::Cast(dstLocal, srcLocal, AscendC::RoundMode::CAST_CEIL, count);
根 据 不 同 的RoundMode取 值,输 出 结 果 会 有 差 异,下 面 样 例 以RoundMode::CAST_CEIL(向 正 无 穷 舍 入)为 例。
结 果 示 例 如 下:
输 入 数 据(srcLocal):
[1.4, 1.5, 1.6, 2.4, 2.5, 2.6, ... 2.6]
输 出 数 据(dstLocal):
[2, 2, 2, 3, 3, 3, ... 3]
当RoundMode为RoundMode::CAST_NONE(half转int32_t有 精 度 损 失,此 时 同CAST_RINT模 式)或RoundMode::CAST_RINT(四 舍 六 入 五 成 双 舍 入)时,结 果 示 例 如 下:
输 入 数 据(srcLocal):
[1.4, 1.5, 1.6, 2.4, 2.5, 2.6, ... 2.6]
输 出 数 据(dstLocal):
[1, 2, 2, 2, 2, 3, ... 3]
当RoundMode为RoundMode::CAST_FLOOR(向 负 无 穷 舍 入)时,结 果 示 例 如 下:
输 入 数 据(srcLocal):
[1.4, 1.5, 1.6, 2.4, 2.5, 2.6, ... 2.6]
输 出 数 据(dstLocal):
[1, 1, 1, 2, 2, 2, ... 2]
当RoundMode为RoundMode::CAST_ROUND(四 舍 五 入 舍 入)时,结 果 示 例 如 下:
输 入 数 据(srcLocal):
[1.4, 1.5, 1.6, 2.4, 2.5, 2.6, ... 2.6]
输 出 数 据(dstLocal):
[1, 2, 2, 2, 3, 3, ... 3]
当RoundMode为RoundMode::CAST_TRUNC(向 零 舍 入)时,结 果 示 例 如 下:
输 入 数 据(srcLocal):
[1.4, 1.5, 1.6, 2.4, 2.5, 2.6, ... 2.6]
输 出 数 据(dstLocal):
[1, 1, 1, 2, 2, 2, ... 2]
当Cast涉 及int4b_t时,调 用 示 例 如 下:
dstLocal为int8_t类 型,srcLocal为half类 型。
C++inBufferSize_ = srcSize; // src buffer size outBufferSize_ = srcSize / 2; //dst buffer size uint64_t mask = 128; AscendC::LocalTensor<half> srcLocal; srcLocal.SetSize(inBufferSize_); AscendC::LocalTensor<int8_t> dstLocal; dstLocal.SetSize(outBufferSize_); AscendC::LocalTensor<AscendC::int4b_t> dstLocalTmp = dstLocal.ReinterpretCast<AscendC::int4b_t>(); // repeatTime = 1, 128 elements one repeat, 128 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 2, srcRepStride = 8, no gap between repeats AscendC::Cast<AscendC::int4b_t, half>(dstLocalTmp, srcLocal, AscendC::RoundMode::CAST_CEIL, mask, 1, {1, 1, 2, 8});
更 多 样 例
您 可 以 参 考 以 下 样 例,了 解 如 何 使 用Cast指 令 的tensor高 维 切 分 计 算 接 口,进 行 更 灵 活 的 操 作、实 现 更 高 级 的 功 能。
通 过tensor高 维 切 分 计 算 接 口 中 的mask连 续 模 式,实 现 数 据 非 连 续 计 算。
uint64_t mask = 32; // 每 个 迭 代 内 只 计 算 前32个 数
AscendC::Cast(dstLocal, srcLocal, AscendC::RoundMode::CAST_CEIL, mask, 8, { 1, 1, 8, 4 });
结 果 示 例 如 下,输 出 数 据 中 每 个 迭 代 的 前32个 数 以 外 的 数 据 是 未 初 始 化 数 据:
输 入 数 据(srcLocal):
[37.4 7.11 53.5 19.44 22.66 43. 43.16 5.316 74.2
15.7 87.75 86.94 92.56 25.45 36.06 94.6 73.6 30.48
48.16 12.55 27.81 14.67 6.58 48.38 67.5 57.5 63.3
85.2 3.654 68.7 52.53 16.38 13.945 63.84 87.2 82.5
85.7 27.78 15.41 41.66 31.38 14.65 88.25 0.0332 43.06
46.88 15.57 87.1 53.16 33.5 91.06 36.5 55.34 60.53
3.238 23.92 97.5 91.1 78.44 54.47 82. 53.8 72.1
25.06 32.12 15.88 33.38 36.7 33.3 84.4 19.25 1.743
46.16 22.06 4.582 71.1 15.94 22.23 53.47 17.05 48.56
94.44 77.4 90.2 46.56 92.4 9.45 68.44 35.7 31.62
68.1 63.7 77. 92.06 20.45 27.67 93.4 22.39 17.22
73.06 7.12 25.34 36.34 13.54 38.12 24.56 86.56 69.7
68.3 30.38 68.4 86.1 54.44 70. 55.3 48.6 59.03
64.44 15.45 66.5 92.7 60.7 52.22 47. 99.75 41.94
43.06 89.5 36.9 62.5 1.306 48.06 9.37 62.25 20.61
43.8 69.25 27.22 71.44 52.75 11.82 80.6 63.44 53.22
85.44 25.25 2.309 26.88 84.5 29.83 9.93 81.9 97.75
75.75 97.7 72. 19.86 26.62 88.7 74.06 9.24 42.5
14. 39.44 98.56 66.94 89. 57.12 39. 11.57 19.05
86.56 32.66 19.25 99.3 95.6 58.7 79.6 37.38 65.
75.7 8.586 77.7 2.68 75.7 77.56 39.1 39.72 64.06
98.44 30.27 31.9 94.4 85.94 4.965 2.758 92.4 49.53
50.75 5.7 19.69 87.6 20.08 88.8 87.4 63.6 68.3
78.9 45.66 10.01 35.25 71.9 37.38 39.7 43.47 11.67
64.3 35.62 74.3 59.3 28.69 29.56 23.14 36.22 4.88
70.5 25.05 72.6 71.6 32.28 34.66 80. 96.1 98.7
12.91 95.4 61.97 87.94 19.1 40.47 89.6 84. 29.72
17.8 81.44 23.25 33.03 18.67 78. 49.62 63.1 72.75
77.25 3.74 38.9 17.92 76. 25.62 34.53 84. 32.03
57.3 9.21 6.836 68.9 35.78 96.75 56.3 96.1 23.45
78.75 94.25 12.44 56.7 24.55 25.11 90.7 50.94 78.4
3.576 21.81 53.28 26.2 43.1 7.742 13.4 86.44 86.9
13.93 16.48 91.06 42.3 95.5 66.8 40.6 98.06 71.9
67.6 55.9 82.44 93.75 41.53 23.62 40.12 40.53 80.7
80.25 96.3 51.38 93.6 91.3 32.84 88. 69.7 63.16
41.75 43.22 43.22 31.73 84.9 91.6 80. 53.34 27.12
76.6 97.25 44.5 30.28 74.3 76.06 40. 41.28 37.72
99.56 18.73 16.45 92.75 79.1 40.3 68. 23.98 88.7
86.6 24.97 59.6 28.25 82.94 46.12 60.12 34.53 79.7
11.086 20.25 44.88 39.97 42.12 62.7 30.66 42.56 16.69
85.2 90.8 78.75 26.16 18.14 94.06 40.3 20.16 38.
12.99 95.44 76.25 26.03 76. 30.06 27.25 84.56 30.45
66.1 83.25 3.732 39.1 54.22 82.8 43.22 53.03 11.66
88.1 6.83 66.8 44.4 7.5 24.77 74.4 35.9 79.75
41.62 37.06 60.12 57.9 96.94 84.25 39.88 22.55 72.7
58.9 44.75 90.4 46.34 71.3 16.4 26.12 21.45 10.27
2. 41.53 39.03 80.25 2.11 7.88 72.2 27.83 88.1
67.56 10.72 52.84 91.2 97.6 51.44 74.7 3.527 79.25
11.3 19.16 39.53 3.469 98.7 45.72 40.16 47.1 71.8
11.81 52.97 71.44 37.7 26.81 46.22 26.94 4.805 12.18
70.4 51.4 24.2 83.9 9.62 12.445 57.6 85.8 55.12
88.25 32.38 62.88 1.903 47.72 35.9 48.94 86.06 32.44
1.219 35.56 49.78 49.97 24.45 94.5 99.94 44.72 3.404
83.6 23.14 76.7 91.7 24.33 20.62 24.72 4.55 88.94
87.44 95.75 41.56 13.77 34.6 95.94 77.1 24.28 70.06
10.06 11.38 88.8 57.22 94.56 35. 79.8 58.22 44.06
26.9 16.25 99.94 51.1 42.38 84.25 0.9604 48.1 ]
输 出 数 据(dstLocal):
[ 38 8 54 20 23 43
44 6 75 16 88 87
93 26 37 95 74 31
49 13 28 15 7 49
68 58 64 86 4 69
53 17 1879993057 1827499998 1823960025 1570990114
1828150463 1811639312 1794470101 1754296176 1888841335 1715628997
1839753994 1850888497 1889364175 1891068936 1823369913 1769105534
1815638091 1808559970 1601662785 1739089473 1863146361 1694785989
1597138938 1836478181 1888774249 1637707434 1877372650 1796304934
1887530885 1839295471 1707240971 1873242695 33 16
34 37 34 85 20 2
47 23 5 72 16 23
54 18 49 95 78 91
47 93 10 69 36 32
69 64 77 93 21 28
1753837732 1488743807 1711632378 1799581711 1818783215 1891790695
1837723802 1752132873 1727950918 1760390205 1866887130 1824876865
1807839436 1890544910 1889755550 1787129270 1502702106 1841065201
1820156583 1779396288 1760521448 1844604520 1831039103 1843491014
1891199259 1839493317 1801349958 1577807434 1811377215 1879404734
1826057367 1837853054 37 63 2 49
10 63 21 44 70 28
72 53 12 81 64 54
86 26 3 27 85 30
10 82 98 76 98 72
20 27 89 75 1890086927 1826517134
1814783944 1824156809 1875733079 1842114682 1845456975 1830120794
1787980861 1807380585 1535469972 1883860884 1889167601 1747872128
1888317235 1720937006 1836806331 1654152236 1695309475 1892773593
1840737395 1868392748 1833724316 1600153936 1869310159 1883467778
1892641857 1776248953 1833201514 1886743848 1745972258 1860657622
95 86 5 3 93 50
51 6 20 88 21 89
88 64 69 79 46 11
36 72 38 40 44 12
65 36 75 60 29 30
24 37 1733652589 1756325317 1685744372 1780772214
1660252348 1629973784 1847815925 1828941229 1683778661 1519480967
1762160488 1844801381 1832742021 1891724641 1761701480 1695312651
1429433841 1774275423 1828349211 1779786303 1835953259 1784896595
1858432988 1413442268 1893363867 1886679050 1872588913 1473866635
1793158916 1762946052 1719627087 1893231666 76 26
35 84 33 58 10 7
69 36 97 57 97 24
79 95 13 57 25 26
91 51 79 4 22 54
27 44 8 14 87 87
1208960410 1208567888 1215973275 1214859418 1210992732 1208305714
1165379704 1215252623 1197033625 1212172318 1217415148 1211058280
1206798479 1215645776 1209223143 1217611809 1212500082 1215383615
1208567769 1200179260 1216694386 1218070398 1195526187 1211516213
1213089850 1213941743 1216825148 1212565573 1216694248 1217546087
1200178778 1215973524 92 80 54 28
77 98 45 31 75 77
40 42 38 100 19 17
93 80 41 68 24 89
87 25 60 29 83 47
61 35 80 12 1189759014 1218070662
1211057953 1216825400 1215121414 1214596952 1216169420 1210075102
1209157633 1213941279 1195984973 1211648118 1201686666 1212041360
1216103688 1212500024 1173112887 1194608648 1216825427 1209747582
1207191587 1214859224 1203980407 1215711379 1213155353 1203259396
1214859350 1211779156 1217218713 1202473003 1216628529 1196771437
44 54 12 89 7 67
45 8 25 75 36 80
42 38 61 58 97 85
40 23 73 59 45 91
47 72 17 27 22 11
91 42 1211516990 1198213215 1203848735 1217349746
1212303398 1217808150 1215514752 1209878647 1214138433 1215711277
1212041273 1215383541 1214728294 1197754500 1169574019 1208371214
1214269569 1216301092 1216563283 1213548677 1217873970 1203128459
1209812695 1218136029 1194805359 1204439186 1218005120 1213941626
1217153046 1208109091 1215055928 1215318166 5 13
71 52 25 84 10 13
58 86 56 89 33 63
2 48 36 49 87 33
2 36 50 50 25 95
100 45 4 84 24 77
1202210969 1213679767 1209288847 1217480263 1184319410 1214072674
1188382819 1217283870 1200769107 1217939416 1199327294 1213351841
1206667407 1217153163 1215580283 1214138474 1206798167 1194477696
1193690499 1214072706 1216825421 1216693888 1217611496 1198540949
1199654414 1206405188 1214203847 1165183076 1213745302 1208830102
1209944118 1215121459]