aclnnLogicalNot

支持的产品型号

产品 是否支持
Atlas A2 训练系列产品

功能描述

  • 算子功能:LogicalNot算子提供逻辑非运算功能,对输入的布尔值进行取反操作。

  • 计算公式:

    y=¬xy = \neg x

实现原理

输入的bool类型数据在kernel侧以int8进行处理,通过调用Ascend CCast函数将输入的int8数据转换为float16后进行计算,最后通过Cast函数将float16数据转换回int8,实现对输入的布尔值进行取反操作。

算子执行接口

每个算子分为两段式接口,必须先调用“aclnnLogicalNotGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnLogicalNot”接口执行计算。

  • aclnnStatus aclnnLogicalNotGetWorkspaceSize(const aclTensor* x, const aclTensor* out, uint64_t* workspaceSize, aclOpExecutor** executor)
  • aclnnStatus aclnnLogicalNot(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)

说明

  • 算子执行接口对外屏蔽了算子内部实现逻辑以及不同代际NPU的差异,且开发者无需编译算子,实现了算子的精简调用。
  • 若开发者不使用算子执行接口的调用算子,也可以定义基于Ascend IR的算子描述文件,通过ATC工具编译获得算子om文件,然后加载模型文件执行算子。

aclnnLogicalNotGetWorkspaceSize

  • 参数说明:

    • x(aclTensor*,计算输入):必选参数,Device侧的aclTensor,公式中的输入x,数据类型支持BOOL,数据格式支持ND。
    • out(aclTensor*,计算输出):Device侧的aclTensor,公式中的输出y,数据类型支持BOOL,数据格式支持ND,输出维度与x一致。
    • workspaceSize(uint64_t*,出参):返回用户需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    返回aclnnStatus状态码。

    第一段接口完成入参校验,若出现以下错误码,则对应原因为:
    - 返回161001(ACLNN_ERR_PARAM_NULLPTR):如果传入参数是必选输入,输出或者必选属性,且是空指针,则返回161001。
    - 返回161002(ACLNN_ERR_PARAM_INVALID):x、out的数据类型和数据格式不在支持的范围内。
    

aclnnLogicalNot

  • 参数说明:

    • workspace(void*,入参):在Device侧申请的workspace内存起址。
    • workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclnnLogicalNotGetWorkspaceSize获取。
    • executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream,入参):指定执行任务的AscendCL stream流。
  • 返回值:

    返回aclnnStatus状态码。

约束与限制

  • x,out的数据类型只支持BOOL,数据格式只支持ND

算子原型

算子类型(OpType) LogicalNot
name type data type format
算子输入
x tensor bool ND
算子输出 y tensor bool ND
核函数名 logical_not

调用示例

详见test_aclnn_logical_not.cpp