| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
docs目录基本概念md文件名改为英文 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !4182 merge master into master docs目录基本概念md文件名改为英文 Created-by: gitcode-chenjiao Commit-by: chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> docs目录基本概念md文件名改为英文: 避免link中的中文字符引发的跳转异常,例如两段式接口.md变成%E4%B8%A4%E6%AE%B5%E5%BC%8F%E6%8E%A5%E5%8F%A3.md,不易于维护,可能导致其他平台跳转有问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#2283](https://gitcode.com/cann/ops-math/issues/2283) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> docs/zh/context所有md和对应的link ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4182 | 16 天前 | |
950支持静态库功能检查与修正 Co-authored-by: sunwenlong<sunwenlong8@huawei.com> # message auto-generated for no-merge-commit merge: !1872 merge static into master 950支持静态库功能检查与修正 Created-by: LuckySun Commit-by: sunwenlong Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 950支持静态库功能检查与修正。 使用新的tiling模板注册接口。 修改examples中的数据类型,因为走AICORE时不支持double ## 关联的Issue [[Bug-Report|缺陷反馈]: 静态库执行算子样例时出现错误](https://gitcode.com/cann/ops-math/issues/1074) ## 测试 算子样例执行通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!1872 | 4 个月前 | |
优化多个文件中的代码风格 Co-authored-by: yuantao<taoyuan18@huawei.com> Co-authored-by: init__zhb__<zhanghaobo6@huawei.com> # message auto-generated for no-merge-commit merge: !1295 merge clean into master 优化多个文件中的代码风格 Created-by: yuantao_ Commit-by: init__zhb__;yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 多个文件中的代码风格可以进行改进: | 文件路径 | 代码片段 | 问题描述 | 行号 | | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------- | --- | | conversion/concat_d/op_api/concat_d.cpp | if (tail_dim * type_size[promoteType] % 32 != 0) { | 避免魔法数字 (32) | 54 | | conversion/depth_to_space/examples/test_geir_depth_to_space.cpp | add1.update_output_desc_##outputName(outputName##outputIndex##_desc); | 宏定义无需分号 | 68 | | conversion/depth_to_space/examples/test_geir_depth_to_space.cpp | inputs.push_back(placeholder##intputIndex); | 宏定义无需分号 | 60 | | conversion/depth_to_space/examples/test_geir_depth_to_space.cpp | char *endptr; | 使用std::string替代char* | 202 | | conversion/strided_slice_grad/examples/test_geir_strided_slice_grad.cpp | pData[i] = value + (i % 3) * 0.4f; // 让数据更有意义 | 避免魔法数字 (3) | 126 | | conversion/strided_slice_grad/examples/test_geir_strided_slice_grad.cpp | return 2; | 避免魔法数字 (2) | 109 | | conversion/strided_slice_grad/examples/test_geir_strided_slice_grad.cpp | return 4; | 避免魔法数字 (4) | 107 | | conversion/concat_d/op_api/concat_d.cpp | if (inputs->Size() > 512 \|\| inputs->Size() < 33) { | 避免魔法数字 (512) | 45 | | conversion/concat_d/op_api/concat_d.cpp | catMaxInputSize = 512; | 避免魔法数字 (512) | 92 | | conversion/depth_to_space/examples/test_geir_depth_to_space.cpp | FILE *fp; | 变量应在使用时声明初始化 | 153 | | conversion/depth_to_space/examples/test_geir_depth_to_space.cpp | add1.set_attr_##attrName(attrValue); | 宏定义无需分号 | 63 | | random/dsa_random_uniform/op_host/op_api/aclnn_multinomial.cpp | auto randomUniform = GetRandomUniformNoReplaceMent(selfContiguous, randomParams, uniqueExecutor.get()); | 数组参数应传递长度 (randomParams) | 377 | | conversion/squeezev2/op_host/squeezev2_infershape.cpp | return SqueezeWithAxes(x_shape, squeeze_dims, y_shape); | 数组参数应传递长度 (squeeze_dims) | 114 | | conversion/concat_dv2/op_host/concat_dv2_tiling.cpp | tiling.set_endTensorIdx(endTensorIdx); | 数组参数应传递长度 (endTensorIdx) | 143 | | conversion/squeezev3/op_host/squeezev3_infershape.cpp | return SqueezeWithAxes(x_shape, squeeze_dims, y_shape); | 数组参数应传递长度 (squeeze_dims) | 117 | | conversion/concat_dv2/op_host/concat_dv2_tiling.cpp | tiling.set_endTensorOffset(endTensorOffset); | 数组参数应传递长度 (endTensorOffset) | 144 | | conversion/squeezev2/op_host/squeezev2_infershape.cpp | if (!IsAxesRangeValid(squeeze_dims, static_cast<int64_t>(x_shape->GetDimNum()), axes)) { | 数组参数应传递长度 (squeeze_dims) | 108 | | random/sim_thread_exponential/op_kernel/sim_thread_exponential.h | AscendC::And(..., mask, len / SHIFT_LEFT_32, { 1, 1, 1, 8, | 数组参数应传递长度 (mask) | 567 | | random/dsa_gen_bit_mask/examples/test_dropout_gen_mask.cpp | std::vector<float> outHostData(8, 0); | 避免魔法数字 (8) | 89 | | conversion/diag_v2/examples/test_geir_diag_v2.cpp | char *endptr; | 使用std::string替代char* | 220 | | random/dsa_gen_bit_mask/examples/test_dropout_gen_mask.cpp | std::vector<uint8_t> maskOutHostData(16, 0); | 避免魔法数字 (16) | 90 | | conversion/diag_v2/examples/test_geir_diag_v2.cpp | FILE *fp; | 变量应在使用时声明初始化 | 177 | | conversion/diag_v2/examples/test_geir_diag_v2.cpp | add1.set_attr_##attrName(attrValue); | 宏定义无需分号 | 63 | | conversion/diag_v2/examples/test_geir_diag_v2.cpp | inputs.push_back(placeholder##intputIndex); | 宏定义无需分号 | 60 | | conversion/diag_v2/examples/test_geir_diag_v2.cpp | add1.update_output_desc_##outputName(outputName##outputIndex##_desc); | 宏定义无需分号 | 92 | | conversion/unfold_grad/op_kernel/unfold_grad_final_axe_big_size.h | _(空行)_ | 代码块末尾不应有空行 | 56 | | random/dsa_gen_bit_mask/examples/test_aclnn_dropout_gen_mask_v2_tensor.cpp | std::vector<uint8_t> outHostData(16, 0); | 避免魔法数字 (16) | 93 | | random/dsa_gen_bit_mask/examples/test_dropout.cpp | std::vector<uint8_t> maskOutHostData(16, 0); | 避免魔法数字 (16) | 90 | | random/dsa_gen_bit_mask/examples/test_dropout.cpp | std::vector<float> outHostData(8, 0); | 避免魔法数字 (8) | 89 | | conversion/concat_dv2/op_host/concat_dv2_def.cpp | 0 | 代码块末尾不应有空行 | 45 | | conversion/concat_d/op_api/aclnn_cat.cpp | catMaxInputs = 512; | 避免魔法数字 (512) | 337 | | conversion/clip_by_value_v2/examples/test_aclnn_clamp_max.cpp | std::vector<int8_t> outHostData(8, 0); | 避免魔法数字 (8) | 80 | | random/dsa_gen_bit_mask/examples/test_dropout_gen_mask_v2.cpp | std::vector<uint8_t> outHostData(16, 0); | 避免魔法数字 (16) | 86 | | conversion/broadcast_to/examples/test_geir_broadcast_to.cpp | inputs.push_back(placeholder##intputIndex); | 宏定义无需分号 | 89 | | random/dsa_gen_bit_mask/examples/test_aclnn_bernoulli.cpp | std::vector<float> outHostData(16, 0); | 避免魔法数字 (16) | 89 | | conversion/confusion_transpose_d/examples/test_aclnn_confusion_transpose.cpp | std::vector<float> outHostData(8, 1); | 避免魔法数字 (8) | 116 | | conversion/clip_by_value_v2/examples/test_aclnn_clamp_max_tensor.cpp | std::vector<double> outHostData(8, 0); | 避免魔法数字 (8) | 82 | ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:清理代码,优化代码风格。 See merge request: cann/ops-math!1295 | 5 个月前 | |
math仓算子代码整改 Co-authored-by: cai-chengchao<caichengchao1@h-partners.com> # message auto-generated for no-merge-commit merge: !881 merge math_op_back_1 into master math仓算子代码整改 Created-by: cai-chengchao Commit-by: cai-chengchao Merged-by: cann-robot Description: ## 描述 math仓算子代码整改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!881 | 6 个月前 | |
clip_by_value/v2 codecheck fix Co-authored-by: wangpengbo26<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !3480 merge codecheck_cbv into master clip_by_value/v2 codecheck fix Created-by: wangpengbo26 Commit-by: wangpengbo26 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 移除 clip_by_value_tiling.cpp 中的多余空行: 在 ClipByValueTiling::DoOpTiling() 中,删除了第 74 行(yDtype 赋值)与第 75 行(CheckDtype 调用)之间的空白行,使代码风格更紧凑一致。 移除 clip_by_value_v2_tiling.cpp 中的多余空行: 在 ClipByValueV2Tiling::DoOpTiling() 中,做了完全相同的空行删除,保持两个文件的风格一致。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> NA ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:cleancode See merge request: cann/ops-math!3480 | 1 个月前 | |
refactor: arch35算子Reg级API重命名迁移 Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !4468 merge work_8 into master refactor: arch35算子Reg级API重命名迁移 Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 将 arch35 架构下 40 个算子 kernel 文件中的 Reg 级 API 名称从旧命名迁移到新命名,与已迁移的算子(xlogy、dawsn、rint、cdist、reduce_all、power 等)保持一致。 涉及的 API 重命名映射: - __local_mem__ → __ubuf__(地址空间限定符统一) - Reg::DataCopy (LoadDist) → Reg::LoadAlign(UB 到寄存器的对齐加载) - Reg::DataCopy (StoreDist) → Reg::StoreAlign(寄存器到 UB 的对齐存储) - Reg::DataCopyUnAlignPre → Reg::LoadUnAlignPre - Reg::DataCopyUnAlign → Reg::LoadUnAlign - Reg::MaskPack → Reg::Pack - Reg::MaskUnPack → Reg::UnPack - Reg::MaskAnd → Reg::And(与已有 Reg::And 通过重载统一) - Reg::CompareScalar → Reg::Compares - Reg::UnalignReg → Reg::UnalignRegForLoad 涉及的算子包括:clip_by_value、clip_by_value_v2、adjacent_difference、bitwise_xor、div、floor_div、floor_mod、lerp、logical_or、mod、pow、signbit、tanh_grad。 此外,adjacent_difference 算子中存在原有的 __local_mem__/__ubuf__ 地址空间限定符不一致问题(左侧声明与右侧转换不匹配),本次重命名一并修复。 ### 改动原因 AscendC SDK 更新了 Reg 级 API 命名规范,将原有的 DataCopy 拆分为语义更明确的 LoadAlign/StoreAlign,并移除了 Mask 系列 API 的 "Mask" 前缀(通过重载统一)。本 PR 将相关算子迁移至新命名。 ### 改动方法 纯机械重命名,无逻辑变更。所有改动均为 1:1 的 API 名称替换,增删行数完全对称(+417 -417)。Load/Store 语义区分基于原有模板参数(LoadDist → LoadAlign, StoreDist → StoreAlign)和参数顺序(寄存器在前为 Load,地址在前为 Store)。 ## 关联的Issue - #2529 ## 测试 待补充:二级冒烟测试、算子泛化测试。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 See merge request: cann/ops-math!4468 | 21 小时前 | |
optimize the performace of aicpu ClipByValueV2 operator Co-authored-by: ZhaiPeiChao<zhaipeichao@huawei.com> # message auto-generated for no-merge-commit merge: !2460 merge clip_by_value_v2 into master optimize the performace of aicpu ClipByValueV2 operator Created-by: ZhaiPeiChao Commit-by: ZhaiPeiChao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 对 AICPU 的 ClipByValueV2 算子进行了全面的性能优化,通过重构核心计算逻辑、优化并行调度策略、分离标量/逐元素边界处理路径,显著提升了算子执行效率。 ### 主要改动 1. **核心计算函数重构**: 将原有的函数指针调用模式重构为专用的内联函数(ClampScalar、ClampComplex),使用 if constexpr 和类型特征在编译期选择最优路径,消除了运行时开销。 2. **并行调度优化**: 将并行阈值从基于元素数量(256K/32K)改为基于字节数(200KB/40KB),新增统一的 DispatchParallel 调度函数,优化小数据量的串行回退策略。 3. **分支路径分离**: 区分标量边界和逐元素边界两种场景,为每种场景提供专用的 kernel 函数(KernelScalarBound、KernelElemBound 等),标量场景预加载边界值到寄存器。 4. **编译器优化提示**: 大量使用 __attribute__((always_inline))、__attribute__((hot))、__restrict__、__builtin_expect 等编译器提示,优化指令级并行和分支预测。 5. **类型分发重构**: 将 std::map 函数指针分发改为 switch-case 结构,利用编译器优化和更紧凑的代码布局。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> issue [#1380](https://gitcode.com/cann/ops-math/issues/1380) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 高频 fp32 scalar-bounds 中等规模(64K):**T=4 7.5× / T=6 5.7×**; - 整型 elem-bounds(1M int32):**T=6 1.37×**; - int8 scalar-bounds:**T=1 1.29× / T=4 1.22×**; - 单线程普遍:**1.1–1.4×**(向量化 + 分支外提); - 大张量 DRAM 带宽饱和场景:0.93–0.97×(噪声范围)。 ### T=1(单线程,反映纯算法/访存/向量化收益) | case | old(ms) | new(ms) | speedup | old(GB/s) | new(GB/s) | equal | |---|---:|---:|---:|---:|---:|:---:| | fp32 small 1K scalar-bounds | 0.0130 | 0.0110 | 1.18× | 0.60 | 0.71 | Y | | fp32 small 1K elem-bounds | 0.0120 | 0.0130 | 0.92× | 1.30 | 1.20 | Y | | fp32 64K scalar-bounds | 0.4419 | 0.3173 | **1.39×** | 1.19 | 1.65 | Y | | fp32 256K elem-bounds | 2.1340 | 2.2015 | 0.97× | 1.96 | 1.91 | Y | | int32 256K scalar-bounds | 0.9320 | 0.8534 | 1.09× | 2.25 | 2.46 | Y | | int32 1M elem-bounds | 8.7056 | 7.8415 | **1.11×** | 1.93 | 2.14 | Y | | int8 1M scalar-bounds | 2.2670 | 1.7555 | **1.29×** | 0.92 | 1.19 | Y | | fp32 16M elem-bounds | 162.6 | 175.2 | 0.93× | 1.65 | 1.53 | Y | ### T=4 | case | old(ms) | new(ms) | speedup | new(GB/s) | equal | |---|---:|---:|---:|---:|:---:| | fp32 64K scalar-bounds | 0.4513 | 0.0600 | **7.52×** | 27.3 | Y | | fp32 256K elem-bounds | 2.1500 | 1.6860 | **1.28×** | 2.49 | Y | | int32 1M elem-bounds | 8.6700 | 8.4860 | 1.02× | 1.98 | Y | | int8 1M scalar-bounds | 2.2500 | 1.8450 | **1.22×** | 1.13 | Y | ### T=6 | case | old(ms) | new(ms) | speedup | new(GB/s) | equal | |---|---:|---:|---:|---:|:---:| | fp32 64K scalar-bounds | 0.4450 | 0.0776 | **5.73×** | 21.1 | Y | | int32 1M elem-bounds | 8.6820 | 6.3410 | **1.37×** | 2.65 | Y | | int8 1M scalar-bounds | 2.2700 | 1.9800 | 1.15× | 1.06 | Y | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2460 | 2 个月前 | |
refactor clip_by_value/v2 with Brc_templates Co-authored-by: wangpengbo26<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !3266 merge clipByValue into master refactor clip_by_value/v2 with Brc_templates Created-by: wangpengbo26 Commit-by: wangpengbo26 Merged-by: cann-robot Description: ## 描述 重构 conversion/clip_by_value 和 conversion/clip_by_value_v2 的 AICore 实现,以高性能 Broadcast 模板形式接入算子调度与计算流程。 主要改动: - Host 侧按 dtype 构造 ClipByValue/ClipByValueV2 的 OpDag,调用 BroadcastBaseTiling 完成模板 tiling,并根据 schMode 生成模板 tiling key。 - Kernel 侧新增 arch35 模板入口,通过 template <schMode> 和 BroadcastSch<schMode, OpDag> 执行广播调度。 - DAG 中融合 clip 的 min/max 两步计算,ClipByValue 保持 Min(x, max) 后 Max(result, min),ClipByValueV2 保持 Max(x, min) 后 Min(result, max)。 - int64 路径使用 MicroAPI RegTraitNumTwo 处理 64 位计算。 - 更新两个算子的 host tiling UT,覆盖 fp16、bf16、fp32、int32、int64、广播和 dtype mismatch 场景。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/2015 ## 测试 - ClipByValue 全量 CSV 精度用例 245 条最终 PASS。 - ClipByValueV2 全量 CSV 精度用例 169 条最终 PASS。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:算子模板化重构 See merge request: cann/ops-math!3266 | 1 个月前 | |
perf: 合并 op_kernel 的 CMakeList 到算子根目录 Co-authored-by: zhanw_coding<zhanwang@huawei.com> # message auto-generated for no-merge-commit merge: !3446 merge ft-cmake into master perf: 合并 op_kernel 的 CMakeList 到算子根目录 Created-by: zhanw_coding Commit-by: zhanw_coding Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> perf: 合并 op_kernel 的 CMakeList 到算子根目录 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2064 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:编译工程优化 See merge request: cann/ops-math!3446 | 1 个月前 | |
【bugfix】修复clip_by_value_v2文档 Co-authored-by: majiajian_hw<majiajian@huawei.com> # message auto-generated for no-merge-commit merge: !2726 merge bugfix_md_0513 into master 【bugfix】修复clip_by_value_v2文档 Created-by: nunnons2 Commit-by: majiajian_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> clip_by_value_v2文档中,aclnn接口名称写错,少了Tensor。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1541 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已完成 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> conversion/clip_by_value_v2/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2726 | 2 个月前 |
ClipByValueV2
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
- 算子功能: 将输入的所有元素限制在[clipValueMin,clipValueMax]范围内,若元素大于clipValueMax则限制为clipValueMax,若元素小于clipValueMin则限制为clipValueMin,否则等于元素本身。
- 计算公式:
yi=max(min(xi,max_valuei),min_valuei){y}_{i} = max(min({{x}_{i}},{max\_value}_{i}),{min\_value}_{i}) yi=max(min(xi,max_valuei),min_valuei)
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入张量。 | INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64 FLOAT16、FLOAT、DOUBLE、BOOL、BFLOAT16、COMPLEX64、COMPLEX128 |
ND |
| clip_value_min | 输入 | 限制元素范围的最小值。 | 同输入张量x | ND |
| clip_value_max | 输入 | 限制元素范围的最大值。 | 同输入张量x | ND |
| y | 输出 | 将输入张量x裁剪后的输出张量。 | 同输入张量x | ND |
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_clamp | 通过aclnnClamp接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_clamp_max test_aclnn_inplace_clamp_max |
通过aclnnClampMax&aclnnInplaceClampMax接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_clamp_max_tensor test_aclnn_inplace_clamp_max_tensor |
通过aclnnClampMaxTensor&aclnnInplaceClampMaxTensor接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_clamp_min | 通过aclnnClampMin接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_clamp_min_tensor test_aclnn_inplace_clamp_min_tensor |
通过aclnnClampMinTensor&aclnnInplaceClampMinTensor接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_clamp_tensor | 通过aclnnClampTensor接口方式调用clip_by_value_v2算子。 |
| aclnn调用 | test_aclnn_hardtanh test_aclnn_inplace_ardtanh |
通过aclnnHardtanh&aclnnInplaceHardtanh接口方式调用clip_by_value_v2算子。 |
| 图模式调用 | test_geir_clip_by_value_v2 | 通过算子IR构图方式调用clip_by_value_v2算子。 |