已合并
feat(logical_or): 支持arch35平台多数据类型kernel直接计算 #2930
hahaha22创建于 5月25日
feat(logical_or): 支持arch35平台多数据类型kernel直接计算 #2930
已合并
hahaha22创建于 5月25日
hahaha22成员
5月25日

描述

logical_or算子在arch35(Ascend 950PR/Ascend 950DT)平台上新增INT8、UINT8、INT16、INT32、INT64、FLOAT16、BFLOAT16、FLOAT数据类型的kernel直接计算支持。此前仅BOOL类型可走AiCore kernel,其他类型需先Cast到BOOL再计算。在RegBase平台上,当两个输入类型相同且属于kernel支持的数据类型时,可直接调用kernel计算,减少Cast开销。

改动原因

  • 原logical_or算子仅支持BOOL类型走AiCore kernel,非BOOL类型需要先Cast到BOOL再调用BOOL kernel,增加了额外Cast开销
  • arch35平台(Ascend 950PR/950DT)具备RegBase能力,可支持多种数据类型的向量计算

改动方法

  1. kernel侧:新增三种DAG计算模式:
    • LogicalOrCompute<uint8_t>:BOOL类型专用,直接位OR后输出
    • LogicalOrIntegralCompute<T>:整数类型专用,Or→Compare(NE 0)→Select(1/0)→输出BOOL
    • LogicalOrFloatCompute<T, IntT>:浮点类型专用,使用自定义MicroAPI Op LogicalOrFloatCustom实现位OR+Compare+Select,输出BOOL
  2. tiling侧:DoOpTiling按dtype分支选择对应DAG模板进行tiling
  3. Host API侧:aclnn层新增双路径策略——RegBase+同类型+kernel支持类型直接调用kernel;其他情况Cast到BOOL后调用
  4. OpDef/Proto:扩展输入dtype支持列表,输出统一为BOOL;新增InferDataType强制输出BOOL
  5. binary config:新增8种dtype的binary配置(ascend950)
  6. l0op层:AllocTensor输出类型改为DT_BOOL;IsAiCoreSupport在RegBase上支持所有kernel dtype

关联的Issue

  • #1680

测试

  • 支持INT8/UINT8/INT16/INT32/INT64/FLOAT16/BF16/FLOAT各数据类型的kernel计算验证
  • 验证非RegBase平台仍走BOOL Cast路径
  • 验证双输入类型不同时走BOOL Cast路径
  • 验证广播场景正确性

文档更新

  • 更新README.md:输入dtype列表、各平台支持说明
  • 更新aclnn接口文档:out dtype约束、平台限制说明

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 hahaha22 的贡献)
Hhahaha22成员
5月25日 创建了 pull request,commit 28c08205
此处折叠了79条消息 查看更多
RuiWang_成员
5月29日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
5月29日 添加了label:lgtm
CANN-robot
CANN-robot成员
5月29日 评论:

Review Guide

This pull-request passes review.
Committers who wrote a comment of /approve are: 汤磊, 陈娇, 宋凯, wangrui_.
Reviewers who wrote a comment of /lgtm are: 宋凯, 陈娇, wangrui_, 汤磊.

likedislike
CANN-robotCANN-robot成员
5月29日 关闭了关联的issue
CANN-robotCANN-robot成员
5月29日 合入了pull request