当前位置: 首页 > news >正文

CANNBot SIMT API总览

SIMT C API 总览

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

SIMT API基于AI Core硬件能力,通过AscendC::Simt::VF_CALL启动SIMT VF子任务。每32个线程组成一个Warp,Warp内每个线程称为Lane(编号0~31)。

头文件包含

#include "simt_api/asc_simt.h" // 通用(非half/bfloat16/fp8类型) #include "simt_api/asc_fp16.h" // half/half2类型API #include "simt_api/asc_bf16.h" // bfloat16/bfloat16x2_t类型API #include "simt_api/asc_fp8.h" // hifloat8x2_t/float8_e4m3x2_t/float8_e5m2x2_t类型API

API分类

类别功能头文件索引文件
核函数定义启动SIMT VF子任务common_functions.hmisc/asc_vf_call.md
同步函数线程同步与内存可见性device_sync_functions.h01_同步函数.md
数学函数三角/指数/对数/幂等运算math_functions.h02_数学函数.md
精度转换取整(rint/round/floor/ceil)math_functions.h03_精度转换.md
比较函数判断有限数/NaN/Infmath_functions.h04_比较函数.md
原子操作UB/GM上的原子读写device_atomic_functions.h05_原子操作.md
Warp函数Warp内数据交换/归约device_warp_functions.h06_Warp函数.md
类型转换float/half/bf16/int间转换device_functions.h07_类型转换.md
向量构造make_int2/float2等vector_functions.h08_向量构造函数.md
Cache Hints带缓存提示的Load/Storedevice_functions.h09_Cache_Hints.md
调测接口printf/assert/trapasc_simt.h10_调测接口.md
内置宏特殊值常量和数学常数asc_simt.h/asc_fp16.h/asc_bf16.h11_内置宏.md

核函数定义与启动

asc_vf_call

在SIMD与SIMT混合编程场景,启动SIMT VF(Vector Function)子任务,通过参数配置,启动指定数目的线程,执行指定的SIMT核函数。

注意:asc_vf_call启动SIMT VF子任务时,子任务函数不能是类的成员函数,推荐使用普通函数或类静态函数,且入口函数必须使用__simt_vf__修饰宏。传递的参数只支持裸指针和常见基本数据类型,不支持传递结构体、数组等。

函数原型:

template <auto funcPtr, typename... Args> __aicore__ inline void asc_vf_call(dim3 threadNums, Args &&...args)

模板参数:

参数名描述
funcPtr用于指定SIMT入口核函数
Args定义可变参数,用于传递实参到SIMT入口核函数

参数说明:

参数名输入/输出描述
threadNums输入dim3结构{dimx,dimy,dimz},指定SIMT线程块内线程数量。线程总数=dimxdimydimz,必须<=2048
args输入可变参数,传递实参到SIMT入口核函数

返回值: 无

需要包含的头文件:#include "simt_api/common_functions.h"

调用示例:

__simt_vf__ __launch_bounds__(2048) inline void SimtCompute( __gm__ float* dst, __gm__ float* src0, __gm__ float* src1, int count) const { for(int idx = threadIdx.x + blockIdx.x * blockDim.x; idx < count; idx += gridDim.x * blockDim.x) { dst[idx] = src0[idx] + src1[idx]; } } __global__ __aicore__ void SimtComputeShell(__gm__ float* x, __gm__ float* y, __gm__ float* z, const int size) { __gm__ float* dst = x; __gm__ float* src0 = y; __gm__ float* src1 = z; asc_vf_call<SimtCompute>(dim3{1024, 1, 1}, dst, src0, src1, size); }

SIMD与SIMT混合编程辅助函数

以下函数用于SIMD与SIMT混合编程场景中的辅助操作。

GetRuntimeUBSize

获取运行时UB空间的大小,单位为byte。开发者根据UB的大小来计算循环次数等参数值。

函数原型:__aicore__ inline uint32_t GetRuntimeUBSize()

返回值: 运行时UB空间的大小(字节)。Ascend 950PR/Ascend 950DT架构下,SIMD与SIMT混合场景中UB大小上限为216KB,非混合场景返回固定值248KB。

调用示例:

uint32_t totalLength = 126976; uint32_t tileLength = AscendC::GetRuntimeUBSize() / sizeof(half) / 2; uint32_t tileNum = totalLength / tileLength;

BlockReduceMax / BlockReduceMin / BlockReduceSum

对每个datablock内所有元素分别求最大值、最小值、求和。这些是SIMD层面的归约指令,在SIMD与SIMT混合编程场景中使用。

  • BlockReduceMax: 对每个datablock内所有元素求最大值
  • BlockReduceMin: 对每个datablock内所有元素求最小值
  • BlockReduceSum: 对每个datablock内所有元素求和(二叉树方式两两相加)

支持的数据类型: half, float

函数原型(mask连续模式):

template <typename T, bool isSetMask = true> __aicore__ inline void BlockReduceMax(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t repeatTime, const int32_t mask, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)

更多详细的参数说明(mask模式、stride语义等),请参考 AscendC SIMD API 文档。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/2745225.html

相关文章:

  • 停止用AI写代码,开始用大脑建系统:从“提示词搬运工”到“架构决策者”的7天跃迁训练
  • 快手面试官问:Agent跑50轮突然变傻了
  • 崩坏星穹铁道自动化工具:三月七小助手完全指南
  • GTE-large-zh vs BGE-large-zh:全面对比与迁移学习方案终极指南
  • 天线阵列S2P批量解析与方向图参数一键计算(含高低频适配)
  • 别再只用-transparentcolor了!用Tkinter窗口叠加,轻松实现聊天框、悬浮球等UI的半透明效果
  • GPT-4 Turbo实战指南:128K上下文与跨模态理解如何重构AI落地
  • 如何快速掌握OpenCore Legacy Patcher:让旧Mac重获新生的完整指南
  • 告别SLAM跟踪丢失就卡住!用ORB-SLAM Atlas实现‘无缝续命’的保姆级原理拆解
  • AMCL定位突然失效?可能是你没处理好‘机器人绑架’和‘里程计漂移’
  • STM32F103C8T6驱动MAX30205测温:手把手教你搞定I2C多从机地址配置与数据读取
  • 终极指南:深入理解MOSS-Audio-Tokenizer-Nano-ONNX架构:编码器与流式解码器工作原理
  • 内部专家的“经验萃取”远比“人才引进”更重要
  • 编写程序,输入办公室空调温度,个人体感,分析温湿度对呼吸道,关节的影响并评级。
  • bonsai-image-ternary-4B-gemlite-2bit模型架构详解:MMDiT块与文本编码器设计
  • MakeMeAHanzi终极指南:免费开源汉字数据库,9000+汉字笔画动画全解析
  • 如何快速上手crt-animation-terminal-ltx-2.3-lora:5分钟创建复古CRT视频特效
  • 手把手教你用华为交换机DHCP地址池做网络健康度检查:看`used`、`idle`、`conflict`比例
  • 机器视觉:掩膜编辑
  • 从一次httpd部署故障讲起:手把手教你用patchelf和readelf诊断并修复Linux动态库依赖
  • Excel用户福音:用JimuReport积木报表的打印设计器,5分钟搞定不动产证、发票等复杂套打
  • Mermaid在线编辑器:让图表制作变得像写笔记一样简单
  • 从SAML到OIDC:一次企业身份认证架构的‘现代化’升级踩坑实录
  • 用PHPStudy在Windows上复现phpMyAdmin 4.8.1文件包含漏洞(附详细配置与双倍编码绕过技巧)
  • 如何将DeBERTa-v2-xlarge集成到你的AI产品中:企业级应用案例分享
  • Vicuna-7B vs Llama 2:终极性能对比与核心差异深度解析
  • Gemma 4-31B安全与伦理:负责任AI使用的最佳实践指南
  • 深入解析TeleChat2.5-35B架构设计:350亿参数的智能实现
  • 生产环境部署Qwen3-4B-Instruct-2507:vLLM与SGLang性能对比及优化策略
  • Gemma-4 E4B模型架构深度解析:从Sliding Attention到混合专家系统的完整指南