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

cann/asc-devkit:内置数据类型

内置数据类型

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

SIMD与SIMT混合编程提供了一系列适用于Device侧的数据类型,包括标量、短向量和dim3结构体。

标量类型

标量数据类型覆盖布尔型(bool)、整型(uint8/int8到uint64/int64)、浮点型(float8_e4m3、float8_e5m2、hifloat8、half、bfloat16、float)。

  • 布尔型:
    bool:全0代表false,否则代表true;占用8bit内存;取值为true或false。
  • 整型:
    • uint8_t:unsigned char;占用8bit内存;取值范围为[0, 255]。
    • int8_t:signed char;占用8bit内存;取值范围为[-128, 127]。
    • uint16_t:unsigned short;占用16bit内存;取值范围为[0, 65535]。
    • int16_t:signed short;占用16bit内存;取值范围为[-32768, 32767]。
    • uint32_t:unsigned int;占用32bit内存;取值范围为[0, 4294967295]。
    • int32_t:signed int;占用32bit内存;取值范围为[-2147483648, 2147483647]。
    • uint64_t:unsigned long;占用64bit内存;取值范围为[0, 18446744073709551615]。
    • int64_t:signed long;占用64bit内存;取值范围为[-9223372036854775808, 9223372036854775807]。
  • 浮点型:
    • float8_e4m3_t:符号位宽1,指数位宽4,尾数位宽3;占用8bit内存;取值范围为[2^6 - 2^9, 2^9 - 2^6]。
    • float8_e5m2_t:符号位宽1,指数位宽5,尾数位宽2;占用8bit内存;取值范围为[2^13 - 2^16, 2^16 - 2^13]。
    • hifloat8_t:符号位宽1,点域位宽2,指数与尾数位宽由点域编码决定;占用8bit内存;点域编码决定数据精度与取值范围。
    • half:符号位宽1,指数位宽5,尾数位宽10;占用16bit内存;取值范围为[2^5 - 2^16, 2^16 - 2^5]。
    • bfloat16_t:符号位宽1,指数位宽8,尾数位宽7;占用16bit内存;取值范围为[2^120 - 2^128, 2^128 - 2^120]。
    • float:符号位宽1,指数位宽8,尾数位宽23;占用32bit内存;取值范围为[2^104 - 2^128, 2^128 - 2^104]。

短向量类型

短向量类型是一种在SIMD与SIMT混合编程模型中提供的固定长度向量类型,用于简化向量数据的表示和操作。该类型适用于处理包含多个分量的数据,如坐标、颜色、向量运算等。

  • 内存特点:

    紧凑存储:短向量类型在内存中连续存储,无填充 。

    对齐要求:遵循自然对齐原则,提升访问效率。

    跨线程共享:可存储在Unified Buffer中供线程块内共享 。

    直接内存访问:支持直接从Global Memory加载和存储。

  • 应用场景:

    颜色处理:RGB/RGBA颜色值的操作。

    向量运算:物理模拟、图形渲染中的向量计算。

    数据打包:将多个相关值打包处理。

    内存访问优化:通过向量化提升内存带宽利用率。

  • 短向量变量访问:

    变量通过.x、.y、.z、.w的方式进行访问。

当前已支持的短向量数据类型如下:

表 1短向量数据类型

元素数据类型Vector X2Vector X4
unsigned charuchar2uchar4
signed charchar2char4
unsigned short (16bit)ushort2ushort4
signed short (16bit)short2short4
unsigned intuint2uint4
signed intint2int4
无符号的长整型 (64bit)ulonglong2ulonglong4
有符号的长整型 (64bit)longlong2longlong4
无符号的长整型 (32bit)ulong2ulong4
有符号的长整型 (32bit)long2long4
浮点型,1符号位,2指数位,1尾数位float4_e2m1x2_t-
浮点型,1符号位,1指数位,2尾数位float4_e1m2x2_t-
浮点型,1符号位,4指数位,3尾数位float8_e4m3x2_t-
浮点型,1符号位,5指数位,2尾数位float8_e5m2x2_t-
浮点型 hif8hifloat8x2_t-
浮点型,1符号位,5指数位,10尾数位half2-
浮点型,1符号位,8指数位,7尾数位bfloat16x2_t-
浮点型,1符号位,8指数位,23尾数位float2float4

每种短向量的内存大小与地址对齐大小如下:

表 2短向量数据类型内存大小

数据类型内存大小(字节)地址对齐(字节)
char2, uchar222
char4, uchar444
short2, ushort244
short4, ushort488
int2, uint288
int4, uint41616
long2, ulong288
long4, ulong41616
longlong2, ulonglong21616
longlong4, ulonglong43232
float288
float41616
float4_e2m1x2_t, float4_e1m2x2_t11
float8_e4m3x2_t, float8_e5m2x2_t, hifloat8x2_t22
half2, bfloat16x2_t44

SIMD与SIMT混合编程提供了用于构造短向量的函数。这些构造函数可以将固定个数的同类型标量值组合成一个短向量类型,如make_int2函数功能为将两个int类型的标量作为输入,组合成一个int2类型的短向量类型作为输出。函数列表如下:

  • make_int2

    inline int2 make_int2(int x, int y)
  • make_int4

    inline int4 make_int4(int x, int y, int z, int w)
  • make_uint2

    inline uint2 make_uint2(unsigned int x, unsigned int y)
  • make_uint4

    inline uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w)
  • make_ulonglong2

    inline ulonglong2 make_ulonglong2(unsigned long long int x, unsigned long long int y)
  • make_ulonglong4

    inline ulonglong4 make_ulonglong4(unsigned long long int x, unsigned long long int y, unsigned long long int z, unsigned long long int w)
  • make_longlong2

    inline longlong2 make_longlong2(long long int x, long long int y)
  • make_longlong4

    inline longlong4 make_longlong4(long long int x, long long int y, long long int z, long long int w)
  • make_ulong2

    inline ulong2 make_ulong2(unsigned long int x, unsigned long int y)
  • make_ulong4

    inline ulong4 make_ulong4(unsigned long int x, unsigned long int y, unsigned long int z,unsigned long int w)
  • make_long2

    inline long2 make_long2(long int x, long int y)
  • make_long4

    inline long4 make_long4(long int x, long int y, long int z, long int w)
  • make_float2

    inline float2 make_float2(float x, float y)
  • make_float4

    inline float4 make_float4(float x, float y, float z, float w)
  • make_short2

    inline short2 make_short2(short x, short y)
  • make_short4

    inline short4 make_short4(short x, short y, short z, short w)
  • make_ushort2

    inline ushort2 make_ushort2(unsigned short x, unsigned short y)
  • make_ushort4

    inline ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z,unsigned short w)
  • make_uchar2

    inline uchar2 make_uchar2(unsigned char x, unsigned char y)
  • make_uchar4

    inline uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w)
  • make_char2

    inline char2 make_char2(signed char x, signed char y)
  • make_char4

    inline char4 make_char4(signed char x, signed char y, signed char z, signed char w)
  • make_half2

    inline half2 make_half2(half x, half y)
  • make_bfloat162

    inline bfloat16x2_t make_bfloat162(bfloat16_t x, bfloat16_t y)

使用短向量构造函数需要包含simt_api/vector_functions.h,调用示例如下:

#include "simt_api/vector_functions.h" __simt_vf__ __launch_bounds__(1024) inline void kernel_make_int2(__gm__ int2* dst, __gm__ int* x, __gm__ int* y) { int idx = threadIdx.x + blockIdx.x * blockDim.x; dst[idx] = make_int2(x[idx], y[idx]); }

dim3

用于指定和获取线程网格(Grid)、线程块(Thread Block)在x、y、z维度上的内置结构体。

dim3由3个无符号整数组成,结构体定义为{dimx,dimy,dimz},用于指定3个不同维度的大小,三维总数为dimx * dimy * dimz。开发者可以通过如下方式创建dim3结构。

dim3(x); // 创建一维结构,dimy和dimz为默认值1 dim3(x, y); // 创建二维结构,dimz为默认值1 dim3(x, y, z); // 创建三维结构

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

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

http://www.jsqmd.com/news/858826/

相关文章:

  • DeepEval终极指南:如何用开源框架构建专业级LLM评估体系
  • 如何实现跨设备屏幕共享:Deskreen终极简单指南
  • 如何为老款Mac安装最新macOS?OCLP-Mod技术深度解析
  • 2026年广西水上挖掘机租赁与河道清淤一站式方案深度指南 - 年度推荐企业名录
  • 3步成为Notepad2-mod核心开发者:从使用者到贡献者的完整旅程
  • 昆山捷盛物流|江苏专线零担整车智慧物流服务商 - 品牌优选官
  • 《Windows Sysinternals实战指南》VMMap 学习笔记(8.3):VMMap 窗口全解析——内存类型、指标含义、颜色视图怎么读
  • 2026年国产高端工业仪器仪表知名品牌盘点:五家优选深度解析 - 科技焦点
  • gitstatus 性能揭秘:多线程扫描算法如何实现秒级响应 [特殊字符]
  • 流体动力学模态分析利器:Matlab SPOD工具完全指南
  • ElevenLabs支持甘肃话吗?2024最新实测:87%用户忽略的4个方言语音合成关键配置项
  • 面向 Microsoft 365 的设备码钓鱼攻击机理与防御体系研究
  • 2026温岭市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一休修缮
  • 使用taotoken后c语言工具链调用大模型的延迟与稳定性体验
  • 2026年西安商业工装与高端私宅设计深度指南:刘红旺 vs 张劲夫,谁是你的最优选择? - 精选优质企业推荐官
  • 【IEEE出版,连续4届EI检索成功】第五届电力系统与能源技术国际学术会议(ICPSET 2026) - 爱搞科研的小刘
  • 有一种“错误”的方式
  • TextShot技术原理:图像处理与OCR识别的完整技术栈
  • 华硕笔记本终极优化指南:免费开源G-Helper工具详解
  • 毕业论文难写?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!
  • 计算机毕业设计YOLO+AI多模态大模型智慧交通事故检测分析系统 深度学习 人工智能 大数据毕业设计(源码+LW+PPT+讲解)
  • 2026优质空气净化剂厂家实力排行榜 榜首推荐:东莞市诚丰包装材料有限公司 - damaigeo
  • 【JDK8新特性】Lambda表达式Day1
  • Show-o革命性AI模型:单一Transformer统一多模态理解与生成
  • 2026吴川市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一休修缮
  • SSL 证书到期不用慌!2026 年证书续费流程、避坑要点与一站式办理方案 - 麦麦唛
  • 2026企业架构咨询公司怎么选?长松咨询14年服务14万家企业! - 速递信息
  • NFS存储挂载报错“access denied”?IP没在允许列表里!
  • 巧用ULN2003A轻松扩展单片机IO口
  • 2026中山高端定制灯具厂家实力高口碑TOP3耀庭轩照明稳居榜首 - damaigeo