news 2026/5/9 13:13:33

CANN/ops-solver批量复数矩阵求逆

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/ops-solver批量复数矩阵求逆

CmatinvBatched

【免费下载链接】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×

功能说明

  • 接口功能
    aclsolverCmatinvBatched:计算批量复数矩阵的逆矩阵。

  • 计算公式 $$ A^{-1}A = I $$ 其中$A$为$n \times n$阶非奇异复数方阵,$I$为$n$阶单位矩阵。

  • 示例
    输入"A"为:

    [2-2i ,1-i ,1-i, 1-i 1-i, 2-2i, 1-i ,1-i 1-i, 1-i ,2-2i ,1-i 1-i ,1-i, 1-i, 2-2i] [3-3i ,1-i, 1-i, 1-i 1-i, 3-3i, 1-i ,1-i 1-i, 1-i ,3-3i ,1-i 1-i, 1-i, 1-i, 3-3i]

    输入"n"为: 4
    输入"batchSize"为:2
    调用"aclsolverCmatinvBatched"算子后,
    输出"Ainv"为:

    [0.4+0.4i, -0.1-0.1i,-0.1-0.1i ,-0.1-0.1i -0.1-0.1i ,0.4+0.4i ,-0.1-0.1i ,-0.1-0.1i -0.1-0.1i ,-0.1-0.1i,0.4+0.4i ,-0.1-0.1i -0.1-0.1i ,-0.1-0.1i,-0.1-0.1i,0.4+0.4i] [0.208+0.208i,-0.0417-0.0417i,-0.0417-0.0417i,-0.0417-0.0417i -0.0417-0.0417i,0.208+0.208i,-0.0417-0.0417i,-0.0417-0.0417i -0.0417-0.0417i,-0.0417-0.0417i,0.208+0.208i,-0.0417-0.0417i -0.0417-0.0417i,-0.0417-0.0417i,-0.0417-0.0417i,0.208+0.208i]

函数原型

  • 函数定义

    aclError aclsolverCmatinvBatched( aclsolverHandle_t handle, const int64_t n, std::complex<float> *A, const int64_t lda, std::complex<float> *Ainv, const int64_t lda_inv, int32_t *info, int64_t batchSize);
  • 参数说明:

    参数名输入输出描述
    handle输入solver handle,通过aclsolverCreate创建
    n输入单个矩阵A的行数
    A输入公式中的矩阵A,行主序
    数据类型仅支持COMPLEX64,数据格式支持ND,shape为[batch, n, n]
    lda输入A左右相邻元素间的内存地址偏移量(当前约束为n)
    Ainv输入输出的逆矩阵
    数据类型仅支持COMPLEX64,数据格式支持ND,shape为[batch, n, n]
    lda_inv输入输出的逆矩阵的左右相邻元素间的内存地址偏移量(当前约束为n)
    info输入每个batch矩阵的求逆结果信息
    数据类型支持int32_t,数据格式支持ND,shape为[batch, 1]
    batchSize输入复数矩阵求逆中的矩阵数量
  • 算子约束:

    • lda、lda_inv、info参数在当前版本实际未启用。
    • 入参n小于等于256。
    • 入参batchSize小于等于3000。
  • 调用实现
    使用内核调用符<<<>>>调用核函数。

调用示例

  • 完整代码示例:aclsolverCmatinvBatched批量矩阵求逆示例

  • 核心调用步骤:

    #include <vector> #include <complex> #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 batchSize = 2; int64_t n = 3; int64_t tensorASize = batchSize * n * n; std::vector<int64_t> shape = {batchSize, n, n }; std::vector<std::complex<float>> tensorInAData; std::vector<std::complex<float>> tensorInAinvData; std::vector<int32_t> tensorInInfoData; tensorInAData.resize(tensorASize); tensorInAinvData.resize(tensorASize); tensorInInfoData.resize(batchSize); for (int32_t batchIdx = 0; batchIdx < batchSize; batchIdx++) { for (int32_t i = 0; i < n; i++) { for (int32_t j = 0; j < n; j++) { if (i == j) { tensorInAData[n * n * batchIdx + n * i + j] = {2.0f + batchIdx, -2.0f - batchIdx}; } else { tensorInAData[n * n * batchIdx + n * i + j] = {1.0f, -1.0f}; } } } } for (int32_t batchIdx = 0; batchIdx < batchSize; batchIdx++) { for (int32_t i = 0; i < n; i++) { for (int32_t j = 0; j < n; j++) { tensorInAinvData[n * n * batchIdx + n * i + j] = {-1.0f, -1.0f}; } } } for (int32_t batchIdx = 0; batchIdx < batchSize; batchIdx++) { tensorInInfoData[batchIdx] = 0; } // 调用 aclsolverCmatinvBatched auto ret = aclsolverCmatinvBatched(handle, n, tensorInAData.data(), n, tensorInAinvData.data(), n,tensorInInfoData.data(), batchSize); CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclsolverCmatinvBatched failed. ERROR: %d\n", ret); return ret); // 释放资源 aclsolverDestroy(handle); aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 1; }

【免费下载链接】ops-solver本项目是CANN提供的高级数值求解算子库,实现矩阵分解、求逆、特征值求解等功能在NPU上的加速计算。项目地址: https://gitcode.com/cann/ops-solver

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 13:13:32

CANN/manifest配置仓库

CANN manifest 仓库 【免费下载链接】manifest 本项目是 CANN 的 manifest 配置仓库&#xff0c;用于通过 repo 工具管理和同步 CANN 相关的多个代码仓&#xff0c;定义 CANN 组件的仓库地址、分支版本和目录结构 项目地址: https://gitcode.com/cann/manifest 项目简介…

作者头像 李华
网站建设 2026/5/9 13:13:32

医疗AI性能评估新范式:从敏感度到期望效用的综合度量

1. 项目概述&#xff1a;当AI成为放射科医生的“过滤器” 在放射科医生日益短缺、筛查工作量持续攀升的今天&#xff0c;利用人工智能&#xff08;AI&#xff09;作为“排除设备”来预筛医学影像&#xff0c;将AI判定为“阴性”的病例从放射科医生的阅片队列中直接移除&#xf…

作者头像 李华
网站建设 2026/5/9 13:11:31

CANN DPD算子API参考

DPD算子API参考文档 【免费下载链接】mat-chem-sim-pred 面向工业领域&#xff0c;聚焦计算仿真、预测两大核心场景&#xff0c;构建面向流程工业"机理数据"双轮驱动的领域计算层&#xff0c;推动AI for Science在材料化学领域的深度应用。 项目地址: https://gitc…

作者头像 李华
网站建设 2026/5/9 13:06:29

鸿蒙开源阅读:打造完全自定义的纯净阅读体验终极指南

鸿蒙开源阅读&#xff1a;打造完全自定义的纯净阅读体验终极指南 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 开源阅读鸿蒙版是一款专为鸿蒙系统优化的免费开源小说阅读器&#xff0c;通过自定义书…

作者头像 李华
网站建设 2026/5/9 13:03:44

昇腾/GE UDF错误码文档

UDF错误码 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端…

作者头像 李华