CANN/ops-blas STPTTR测试文档
stpttr算子实现
【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas
概述
BLAS stpttr算子实现。
stpttr(Symmetric Triangular matrix, Packed format To Triangular matrix, Regular storage)算子将 LAPACK 压缩格式(packed format)中的对称三角矩阵展开为按列主序存储的常规二维矩阵。仅写入uplo指定的三角区域,矩阵另一三角及未参与运算的元素保持原值不变。
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | ✓ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
目录结构介绍
test/stpttr/ ├── CMakeLists.txt // 编译工程文件 ├── README.md // 说明文档 └── arch35/ ├── stpttr_test.cpp // 精度测试 ├── stpttr_golden.h // CPU golden 实现 ├── stpttr_testcases.csv // 精度测试用例表 └── stpttr_config.json // 算子测试配置(指针类型、精度模式等)算子描述
算子功能:
将压缩格式三角矩阵AP中的元素按uplo展开到常规矩阵A的对应三角区域:uplo == ACLBLAS_LOWER:复制到A的下三角(含对角),上三角不变uplo == ACLBLAS_UPPER:复制到A的上三角(含对角),下三角不变
AP为列优先压缩存储,长度为n * (n + 1) / 2;A为lda × n的列主序矩阵,lda >= max(1, n)。n == 0时直接返回成功,不访问缓冲区。对应的接口为:
aclblasStatus_t aclblasStpttr( aclblasHandle_t handle, aclblasFillMode_t uplo, int n, const float *AP, float *A, int lda);| 参数 | stpttr 参数说明 | |||
| 参数列表 | Param. | Memory | in/out | 含义 |
| handle | in | aclbLAS 库上下文句柄。 | ||
| uplo | in | 三角存储方式:ACLBLAS_UPPER(121)、ACLBLAS_LOWER(122)。 | ||
| n | in | 方阵维数,须 >= 0;为 0 时立即返回成功。 | ||
| AP | device | in | 压缩格式输入,<type> 数组,长度 n*(n+1)/2。 | |
| A | device | in/out | 常规输出矩阵,<type> 数组,维度 lda × n;非目标三角保持原值。 | |
| lda | in | A 的主维长度,须满足 lda >= max(1, n)。 | ||
算子规格:
算子类型(OpType) stpttr 算子输入 name shape data type format AP n*(n+1)/2 float packed 算子输出 A lda * n float ND 核函数名 stpttr_kernel 算子实现:
Host 侧完成参数校验与 Tiling 计算(按 Vector Core 数切分列块),将 Tiling 数据拷贝至 Device 后,通过
stpttr_kernel_do启动 Kernel。Kernel 按列从 GM 上的压缩缓冲区AP分块搬入 UB,再写回 GM 上常规矩阵A的对应三角列段;lda > n时列间存在 stride 间隔。调用实现
使用内核调用符<<<>>>(stpttr_kernel_do)在aclblas关联的 stream 上异步执行,Host 在返回前同步 stream。
测试用例覆盖
| 分组 | 用例数 | 覆盖场景 |
|---|---|---|
| L0 参数校验 | 4 | 未初始化 handle、n<0、lda 过小、非法 uplo |
| L0 功能 | 13 | n=0/1/2/4/32/128/512,LOWER/UPPER |
| L1 规模与 lda | 18 | n=8~1024、lda>n(8×12、16×32 等) |
| L1 特殊数值 | 12 | 全零、大数、负数、inf、nan、极值组合 |
| L1 参数校验 | 8 | AP/A 空指针、非法 uplo、n=0 与 lda 组合 |
| L1 往返与大规模 | 4 | strttp→stpttr 往返(32×32)、n=10240 |
ST 采用 GTest 参数化 +stpttr_testcases.csv/stpttr_config.json,精度模式为EXACT(仅比对有效三角区,其余位置为 sentinel -999)。
编译运行
在本样例根目录下执行如下步骤,编译并执行算子。
配置环境变量
请根据当前环境上CANN开发套件包的安装方式,选择对应配置环境变量的命令。默认路径,root用户安装CANN软件包
source /usr/local/Ascend/cann/set_env.sh默认路径,非root用户安装CANN软件包
source $HOME/Ascend/cann/set_env.sh指定路径install_path,安装CANN软件包
source ${install_path}/cann/set_env.sh
样例执行
bash build.sh --ops=stpttr --soc=ascend950 --run其中
--soc为可选参数,用于指定目标硬件平台(与上文「产品支持情况」对应)。按实际硬件选用:产品 --soc取值Ascend 950PR / Ascend 950DT ascend950Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ascend910_93Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ascend910b执行结果如下,说明精度对比成功。
[PASS] stpttr_test
【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
