Sgetrf
【免费下载链接】ops-solver本项目是CANN提供的高级数值求解算子库,实现矩阵分解、求逆、特征值求解等功能在NPU上的加速计算。项目地址: https://gitcode.com/cann/ops-solver
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Ascend 950PR/Ascend 950DT | × |
功能说明
接口功能
aclsolverSgetrf:对实数矩阵进行LU分解。计算公式 $$ A = P \cdot L \cdot U $$ 其中$A$为$m \times n$阶实数矩阵,$P$为置换矩阵,$L$为单位下三角矩阵,$U$为上三角矩阵。
示例
输入"A"为:[4.0, 3.0, 2.0, 1.0 3.0, 4.0, 3.0, 2.0 2.0, 3.0, 4.0, 3.0 1.0, 2.0, 3.0, 4.0]输入"m"为: 4
输入"n"为: 4
调用"aclsolverSgetrf"算子后,
输出"A"为L和U合并存储:[4.0, 3.0, 2.0, 1.0 0.75, 1.75, 1.5, 1.25 0.5, 0.4286, 2.0, 2.0 0.25, 0.2857, 0.5, 2.0]输出"ipiv"为pivot信息:
[1, 2, 3, 4]
函数原型
函数定义
aclError aclsolverSgetrf( aclsolverHandle_t handle, const int64_t m, const int64_t n, float *A, const int64_t lda, int32_t *ipiv, int32_t *info);参数说明:
参数名 输入输出 描述 handle 输入 solver handle,通过aclsolverCreate创建 m 输入 矩阵A的行数 n 输入 矩阵A的列数 A 输入/输出 输入为矩阵A,输出为L和U矩阵
数据类型仅支持FLOAT32,数据格式支持ND,shape为[m, n]lda 输入 A左右相邻元素间的内存地址偏移量(当前约束为n) ipiv 输出 置换矩阵的pivot信息
数据类型支持int32_t,数据格式支持ND,shape为[min(m,n), 1]info 输出 分解结果信息
数据类型支持int32_t算子约束:
- lda、info参数在当前版本实际未启用。
调用实现 使用内核调用符<<<>>>调用核函数。
调用示例
完整代码示例:aclsolverSgetrf矩阵LU分解示例
核心调用步骤:
#include <vector> #include "acl/acl.h" #include "cann_ops_solver.h" int32_t main(int32_t argc, char *argv[]) { // 固定写法,acl初始化 int32_t deviceId = 0; aclrtStream stream = nullptr; aclInit(nullptr); aclrtSetDevice(deviceId); aclrtCreateStream(&stream); // 创建solver handle并设置stream aclsolverHandle_t handle = nullptr; aclsolverCreate(&handle); aclsolverSetStream(handle, stream); // 构造输入数据 int64_t m = 4; int64_t n = 4; size_t aMatrixFileSize = m * n * sizeof(float); float* A; aclrtMallocHost((void**)(&A), aMatrixFileSize); // 填充A矩阵数据... int32_t *ipiv = new int32_t[std::min(m, n)]; int32_t *info; // 调用 aclsolverSgetrf auto ret = aclsolverSgetrf(handle, m, n, A, n, ipiv, info); CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclsolverSgetrf failed. ERROR: %d\n", ret); return ret); // 释放资源 delete[] ipiv; aclrtFreeHost(A); aclsolverDestroy(handle); aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }
【免费下载链接】ops-solver本项目是CANN提供的高级数值求解算子库,实现矩阵分解、求逆、特征值求解等功能在NPU上的加速计算。项目地址: https://gitcode.com/cann/ops-solver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考