当前位置:首页 > 技术 > 正文内容

基于Ascend C高阶API的Frac算子实现指南

访客 技术 2026年9月19日 14

算子功能概述

本文档详细介绍了如何利用 Ascend C 提供的高阶 Frac 接口,构建一个能够按元素提取输入张量小数部分的算子。该算子的数学逻辑为取输入值的纯小数部分,计算公式表达为:

$$y = x - \lfloor x \rfloor$$

适配硬件环境

本样例支持在以下昇腾处理器平台上运行:

  • Ascend 950PR / Ascend 950DT
  • Atlas A3 训练系列产品 / Atlas A3 推理系列产品
  • Atlas A2 训练系列产品 / Atlas A2 推理系列产品

工程目录结构

示例工程采用了标准的 Ascend C 工程布局,主要包含源码、脚本及构建配置:

frac_demo/
├── scripts
│   └── generate_data.py    # 自动生成测试输入与真值数据
├── CMakeLists.txt          # 编译构建配置文件
├── data_io.h               # 定义数据读取与写出工具函数
└── kernel_impl.asc         # Ascend C 核函数实现文件

算子规格与实现细节

算子类型: Frac

输入输出规格:

数据角色名称形状数据类型格式
输入src_tensor[1, 4096]floatND
输出dst_tensor[1, 4096]floatND

核函数名称: frac_custom

实现逻辑:

  1. Kernel 侧实现: 直接调用 Frac 高阶 API 对输入张量进行逐元素处理,提取小数部分并写入输出张量。
  2. Tiling 策略: 在 Host 侧通过 GetFracMaxMinTmpSize 接口计算并申请计算所需的临时内存空间。
  3. 核函数调用: 使用 <<<>>> 内核调用符发起核函数执行。

构建与执行流程

请按照以下步骤配置环境、编译工程并运行验证。

1. 环境变量配置

根据 CANN 开发套件的安装路径,选择对应的配置命令。以下示例假设 CANN 安装在默认路径下:

# 针对 root 用户安装场景
source /usr/local/Ascend/cann/set_env.sh

# 针对非 root 用户安装场景
source $HOME/Ascend/cann/set_env.sh

# 若为自定义安装路径 (install_path)
source ${install_path}/cann/set_env.sh

2. 编译与运行指令

在工程根目录下执行以下命令序列,完成构建与测试:

# 创建构建目录并编译
mkdir build_output && cd build_output
cmake -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..
make -j

# 生成测试数据
python3 ../scripts/generate_data.py

# 运行可执行程序
./demo

3. 编译模式选项

如果需要进行 CPU 功能调试或 NPU 仿真,请在执行 cmake 时添加相应参数:

# CPU 调试模式
cmake -DCMAKE_ASC_RUN_MODE=cpu -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..

# NPU 仿真模式
cmake -DCMAKE_ASC_RUN_MODE=sim -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..

注意: 切换模式前请清理 CMake 缓存,可在构建目录下执行 rm CMakeCache.txt 后重新配置。

4. 架构参数说明

  • dav-2201: 对应 Atlas A2/A3 系列产品。
  • dav-3510: 对应 Ascend 950PR/950DT 产品。

结果验证

程序运行结束后,若控制台输出 test pass!,则表明算子计算结果正确,精度验证通过。

标签: Ascend C

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。