文件最后提交记录最后更新时间
实现ger算子Ger(Z = α·x·yᵀ + A) Co-authored-by: liwenkkklll<muyu1522021@163.com> # message auto-generated for no-merge-commit merge: !334 merge feat/ger into master 实现ger算子Ger(Z = α·x·yᵀ + A) Created-by: liwenkkklll Commit-by: liwenkkklll Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ### 测试用例 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/0ca8b201-b613-4895-83d8-1c84348d6d18/image.png 'image.png') ### 测试结果 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/59a18fc2-305f-49e7-9d0a-5819e3d8bd8b/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3344 个月前
实现ger算子Ger(Z = α·x·yᵀ + A) Co-authored-by: liwenkkklll<muyu1522021@163.com> # message auto-generated for no-merge-commit merge: !334 merge feat/ger into master 实现ger算子Ger(Z = α·x·yᵀ + A) Created-by: liwenkkklll Commit-by: liwenkkklll Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ### 测试用例 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/0ca8b201-b613-4895-83d8-1c84348d6d18/image.png 'image.png') ### 测试结果 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/59a18fc2-305f-49e7-9d0a-5819e3d8bd8b/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3344 个月前
refactor: 迁移 experimental 算子 tiling 模块至新公共头文件及命名空间 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !2974 merge master into master refactor: 迁移 experimental 算子 tiling 模块至新公共头文件及命名空间 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 experimental 目录下 22 个算子的 tiling 代码从旧公共头文件及命名空间迁移至新公共头文件及命名空间,统一 tiling 公共接口规范。 ### 改动原因 experimental 算子的 tiling 代码依赖了旧的公共头文件(tiling_base_util.hmath_tiling_templates_registry.htiling_base_class.h)及 Ops::Base 命名空间,需要迁移至新的公共头文件(tiling_util.htiling_templates_registry.htiling_base.h)及 Ops::Math::OpTiling 命名空间,以统一 tiling 公共接口规范。 ### 改动方法 1. 替换 #include 指令: - "op_host/tiling_base_util.h""op_host/tiling_util.h"(20 个文件) - "op_host/math_tiling_templates_registry.h""op_host/tiling_templates_registry.h"(2 个文件) - "op_host/tiling_base_class.h""op_host/tiling_base.h"(1 个文件) 2. 命名空间及 API 迁移: - Ops::Base::EnsureNotScalar()Ops::Math::OpTiling::EnsureNotScalar() - Ops::Base::IsRegbaseSocVersion()Ops::Math::OpTiling::IsRegbaseSocVersion() - using namespace Ops::Baseusing namespace Ops::Math::OpTiling(2 个文件) ### 涉及算子(22 个文件) - **conversion 算子**:col2_im、im2_col - **math 算子**:add_v2、atan、ceil_v2、cross、dot_v2、floor_div、floor_mod、ger_v2、greater_equal(arch35)、isin_part_v1、minimum、ones_like、real、select_v3、sinh、softsign(arch35)、square_v2、trilu(arch35)、trunc_v2 ## 关联的Issue - #1679 - https://gitcode.com/cann/ops-math/issues/1679 ## 测试 通过编译验证及算子冒烟测试。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:重构 - 迁移 tiling 公共头文件及命名空间 See merge request: cann/ops-math!29745 天前
实现ger算子Ger(Z = α·x·yᵀ + A) Co-authored-by: liwenkkklll<muyu1522021@163.com> # message auto-generated for no-merge-commit merge: !334 merge feat/ger into master 实现ger算子Ger(Z = α·x·yᵀ + A) Created-by: liwenkkklll Commit-by: liwenkkklll Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ### 测试用例 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/0ca8b201-b613-4895-83d8-1c84348d6d18/image.png 'image.png') ### 测试结果 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/59a18fc2-305f-49e7-9d0a-5819e3d8bd8b/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3344 个月前
实现ger算子Ger(Z = α·x·yᵀ + A) Co-authored-by: liwenkkklll<muyu1522021@163.com> # message auto-generated for no-merge-commit merge: !334 merge feat/ger into master 实现ger算子Ger(Z = α·x·yᵀ + A) Created-by: liwenkkklll Commit-by: liwenkkklll Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ### 测试用例 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/0ca8b201-b613-4895-83d8-1c84348d6d18/image.png 'image.png') ### 测试结果 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/59a18fc2-305f-49e7-9d0a-5819e3d8bd8b/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3344 个月前
实现ger算子Ger(Z = α·x·yᵀ + A) Co-authored-by: liwenkkklll<muyu1522021@163.com> # message auto-generated for no-merge-commit merge: !334 merge feat/ger into master 实现ger算子Ger(Z = α·x·yᵀ + A) Created-by: liwenkkklll Commit-by: liwenkkklll Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ### 测试用例 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/0ca8b201-b613-4895-83d8-1c84348d6d18/image.png 'image.png') ### 测试结果 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/59a18fc2-305f-49e7-9d0a-5819e3d8bd8b/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3344 个月前
doc tools 工具扫描问题修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !1938 merge master into master doc tools 工具扫描问题修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: doc tools 工具扫描问题修改 See merge request: cann/ops-math!19382 个月前
README.md

GerV2 算子说明文档

1. 算子概述

GerV2 是一个用于执行特定矩阵运算的算子。它接收三个输入张量 xyA,并产生一个输出张量 z。该算子在深度学习、科学计算等领域中可能用于实现一些基于矩阵的更新或变换操作,例如在某些优化算法中对参数矩阵的更新等场景。

2. 输入输出

输入

  • x:一个一维张量,表示某种向量或系数等,其数据类型可以是 floatfloat16int32int16,格式为 FORMAT_ND,且内存会自动连续化。
  • y:同样是一维张量,与 x 类似,数据类型和格式要求一致。
  • A:一个二维张量,表示一个矩阵,其数据类型和格式要求与 xy 相同。

输出

  • z:一个二维张量,也是矩阵形式,其数据类型、格式等要求与输入一致。它通常是基于输入的 xyA 经过特定计算规则得到的结果,可能用于后续的计算流程中。

3. 属性

  • alpha:一个可选的浮点型属性,默认值为 1.0。它可能在计算过程中作为某种缩放因子或系数参与运算,对输出结果产生影响。

4. 功能实现

形状推导

ger_v2_infer.cpp 文件中,通过 InferShapeGerV2 函数实现了对输出张量 z 的形状推导。它会根据输入 xy 的形状(主要是它们的维度大小)来确定输出 z 的形状。具体来说,z 的形状由 x 的长度(第一个维度大小)和 y 的长度(第一个维度大小)共同决定,形成一个二维矩阵,其行数等于 x 的长度,列数等于 y 的长度。

Tiling 分发

ger_v2_tiling.cpp 文件中,定义了 GerV2TilingFunc 函数来实现 tiling 分发逻辑。它主要考虑了以下几个方面:

  • 平台信息获取:通过 GetPlatformInfo 函数获取平台相关的参数,如 ubSize(统一缓冲区大小)和 coreNum(核心数量),这些信息对于后续的 tiling 策略和资源分配很重要。
  • 形状和属性信息获取:通过 GetShapeAttrsInfo 函数获取输入张量的形状信息以及属性 alpha 的值,并进行一系列的校验,确保输入的形状和数据类型等符合预期要求。
  • Workspace 大小获取:通过 GetWorkspaceSize 函数设置 workspace 的大小。
  • Tiling 数据计算:基于上述获取到的信息,计算出 tiling 相关的参数,如每个小核负责的行数、大核负责的行数、尾行的数量、一行分为几个 tile、每次计算的数据个数、最后一次计算的数据个数等,并将这些信息存储到 GerV2TilingData 结构体中,供后续的 kernel 执行使用。
  • Tiling 键设置:根据输入张量的数据类型,设置不同的 tiling 键,以便选择对应的模板进行计算。

Kernel 实现

ger_v2.cppger_v2.h 文件中,定义了 GerV2 类的模板实现,用于具体的计算逻辑。它通过模板参数 T 支持多种数据类型(如 floathalfint32_tint16_t 等),并根据 tiling 数据中的信息,分块地从全局内存中读取输入数据到局部内存,进行计算后再将结果写回到全局内存中。

计算过程大致如下:

  • 数据拷贝:通过 CopyIn 函数将输入张量 xyA 的相关数据分块拷贝到局部内存中的队列里。
  • 计算:在 Compute 函数中,从队列中取出数据,按照一定的计算规则(例如对 y 进行缩放、与 x 相乘等操作后与 A 相加)得到局部结果。
  • 结果拷贝:通过 CopyOut 函数将计算得到的局部结果拷贝到输出张量 z 的相应位置。

整个计算过程是基于 tiling 数据中的分块信息,逐块进行的,以充分利用硬件资源并提高计算效率。