news 2026/5/22 10:39:16

CANN/asc-devkit Crd2Idx函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/asc-devkit Crd2Idx函数

Crd2Idx

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT

功能说明

Crd2Idx函数用于将多维坐标(Coordinate)通过布局(Layout)转换为内存位置索引(Index),这里的Layout包含了Shape和Stride信息。

对于一个布局Layout,其Shape为(d0, d1, ..., dn),Stride为(s0, s1, ..., sn),Coordinate为(c0, c1, ..., cn)到线性索引Index的转换公式为:

例如,对于Shape (3, 4, 5),Stride (20, 5, 1)和Coordinate (1, 2, 3):

维度0:c₀ * s₀ = 1 * 20 = 20 维度1:c₁ * s₁ = 2 * 5 = 10 维度2:c₂ * s₂ = 3 * 1 = 3 Index = 20 + 10 + 3 = 33

当Coordinate维度和Stride维度不相同时,可以采用去线性化(delinearize)的方法,使得Coordinate维度和Stride维度相同,再使用上述公式计算得到最终结果。

去线性化的方法介绍如下:对于一个n维数组,形状为(d0, d1, ..., dn),线性坐标c对应的多维坐标(c0, c1, ..., cn),可以通过以下公式进行转换:

例如:对于Shape ((2, 4), (3, 5)),Stride((3, 6), (1, 24)),Layout((2, 4), (3, 5)) : ((3, 6), (1, 24)),Coordinate(11, 12),按照列优先原则,Crd2Idx的结果为:

crd2idx = delinearize(11, 12) * stride = ((11 % 2, 11 / 2), (12 % 3, 12 / 3)) * ((3, 6), (1, 24)) = ((1, 5), (0, 4)) * ((3, 6), (1, 24)) = 1 * 3 + 5 * 6 + 0 * 1 + 4 * 24 = 129

总结上述过程,计算公式如下:

其中(d0, d1, ..., dn)为Shape,(s0, s1, ..., sn)为Stride,delinearize公式展开如下:

函数原型

// Layout输入,Coordinate转换为Index template <typename T, typename U, typename S> __aicore__ inline constexpr auto Crd2Idx(const T& coord, const Layout<U, S>& layout) // Shape和Stride输入,Coordinate转换为Index template <typename T, typename Shape, typename Stride> __aicore__ inline constexpr auto Crd2Idx(const T& coord, const Shape& shape, const Stride& stride)

参数说明

表 1模板参数说明

|参数名|描述| |--|--| | T | 张量坐标coord类型 | | U/Shape | 张量逻辑形状shape类型 | | S/Stride | 张量步长stride类型 |

表 2参数说明 | 参数名 | 输入/输出 | 描述 | |--------|----------|------| | coord | 输入 | Std::tuple结构类型,用于表示张量在不同维度上的坐标值。
输入的数据类型支持size_t和Std::Int。 | | layout | 输入 | 输入的Layout对象。
输入的数据类型支持Layout类型。 | | shape | 输入 | Std::tuple结构类型,用于定义数据的逻辑形状,例如二维矩阵的行数和列数或多维张量的各维度大小。
输入的数据类型支持size_t和Std:Int。 | | stride | 输入 | Std::tuple结构类型,用于定义各维度在内存中的步长,即同维度相邻元素在内存中的间隔,间隔的单位为元素,与Shape的维度信息一一对应。
输入的数据类型支持size_t和Std::Int。 |

返回值说明

返回根据Coordinate信息转换之后的索引值。

约束说明

输入参数需满足对应的数据类型要求。

调用示例

using namespace AscendC::Te; // Layout形式入参计算索引值 constexpr int M = 11; constexpr int N = 12; constexpr int blockM = 13; constexpr int blockN = 14; auto coord = MakeCoord(AscendC::Std::Int<20>{}, AscendC::Std::Int<30>{}); auto shape = MakeShape(MakeShape(AscendC::Std::Int<blockM>{}, AscendC::Std::Int<M/blockM>{}), MakeShape(AscendC::Std::Int<blockN>{}, AscendC::Std::Int<N/blockN>{})); auto stride = MakeStride(MakeStride(AscendC::Std::Int<blockN>{}, AscendC::Std::Int<blockM*blockN>{}),MakeStride(AscendC::Std::Int<1>{}, AscendC::Std::Int<M*blockN>{})); auto layout = MakeLayout(shape, stride); auto index = layout(coord); // decltype(index)::value = 590 index = Crd2Idx(coord, layout); // decltype(index)::value = 590 // Shape和Stride形式入参计算索引值 auto blockCoordM = AscendC::Std::Int<11>{}; auto blockCoordN = AscendC::Std::Int<12>{}; auto baseShapeM = AscendC::Std::Int<13>{}; auto baseShapeN = AscendC::Std::Int<14>{}; auto basestrideM = AscendC::Std::Int<15>{}; auto basestrideN = AscendC::Std::Int<16>{}; auto coord = MakeCoord(AscendC::Std::Int<0>{}, blockCoordN); auto shape = MakeShape(MakeShape(baseShapeM, baseShapeM), MakeShape(baseShapeN, baseShapeN)); auto stride = MakeStride(MakeStride(basestrideM, basestrideM), MakeStride(basestrideN, basestrideN)); auto index = Crd2Idx(coord, shape, stride); // decltype(index)::value = 192

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 10:38:03

实战OpenAI API认证:深度解析API密钥与OAuth2.0的最佳实践方案

实战OpenAI API认证&#xff1a;深度解析API密钥与OAuth2.0的最佳实践方案 【免费下载链接】openai-openapi OpenAPI specification for the OpenAI API 项目地址: https://gitcode.com/GitHub_Trending/op/openai-openapi OpenAI API认证机制是开发者接入AI能力的关键环…

作者头像 李华
网站建设 2026/5/22 10:37:50

NarratoAI:让AI成为你的视频剪辑师,一键生成专业影视解说

NarratoAI&#xff1a;让AI成为你的视频剪辑师&#xff0c;一键生成专业影视解说 【免费下载链接】NarratoAI 利用AI大模型&#xff0c;一键解说并剪辑视频&#xff1b; Using AI models to automatically provide commentary and edit videos with a single click. 项目地址…

作者头像 李华
网站建设 2026/5/22 10:37:11

终极SMAPI模组加载器指南:5分钟解决星露谷物语模组安装难题

终极SMAPI模组加载器指南&#xff1a;5分钟解决星露谷物语模组安装难题 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否曾因为星露谷物语模组安装复杂、冲突不断而感到困扰&#xff1f;SMAPI模…

作者头像 李华
网站建设 2026/5/22 10:37:10

如何在Windows上实现高效屏幕标注?gInk免费工具终极指南

如何在Windows上实现高效屏幕标注&#xff1f;gInk免费工具终极指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否经常在演示时需要快速圈出重点内容&#xff1…

作者头像 李华
网站建设 2026/5/22 10:37:09

如何在FNF PsychEngine中打造你的专属音乐游戏体验

如何在FNF PsychEngine中打造你的专属音乐游戏体验 【免费下载链接】FNF-PsychEngine Engine originally used on Mind Games mod 项目地址: https://gitcode.com/gh_mirrors/fn/FNF-PsychEngine 如果你热爱音乐节奏游戏&#xff0c;又渴望创造属于自己的独特内容&#…

作者头像 李华
网站建设 2026/5/22 10:36:00

MaterialColorsApp快捷键大全:提升色彩选择效率的10个必备技巧

MaterialColorsApp快捷键大全&#xff1a;提升色彩选择效率的10个必备技巧 【免费下载链接】MaterialColorsApp A handy little Mac app that gives you quick access to the standard material design color palette. 项目地址: https://gitcode.com/gh_mirrors/ma/Material…

作者头像 李华