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

CANN/sip CgemmBatched算子

HCgemmBatched【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip产品支持情况产品是否支持Atlas 200I/500 A2 推理产品×Atlas 推理系列产品×Atlas 训练系列产品×Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√Ascend 950PR/Ascend 950DT×功能说明接口功能asdBlasMakeCgemmBatchedPlan初始化该句柄对应的算子配置。asdBlasCgemmBatched用于计算两批复数矩阵的乘积。计算公式 $$ C alpha * op(A[i])*op(B[i]) beta * C[i] $$ 示例输入“inTensorA[i]”为[ [ 1i, 12i ], [ 13i, 14i ] ]输入“inTensorB[i]”为[ [ 2i, 22i ], [ 23i, 24i ] ]输入“inTensorC[i]”为[ [ 3i, 32i ], [ 33i, 34i ] ]输入“transa”为 N输入“transb”为T。输入“m”为2输入“n”为 2输入“k”为2输入“alpha”为1i“beta”为22i。输入“lda”为 2输入“ldb”为2输入“ldc”为2。输入“batchCount”为1。调用“asdBlasCgemmBatched”算子后输出“C”为[ [ -1519i, -2719i ], [ -3721i, -5713i ] ]函数原型AspbStatus asdBlasMakeCgemmBatchedPlan( asdBlasHandle handle)AspbStatus asdBlasCgemmBatched( asdBlasHandle handle, asdBlasOperation_t transa, asdBlasOperation_t transb, const int64_t m, const int64_t n, const int64_t k, const std::complexfloat alpha, aclTensor * A, const int64_t lda, aclTensor * B, const int64_t ldb, const std::complexfloat beta, aclTensor * C, const int64_t ldc, const int64_t batchCount)asdBlasMakeCgemmBatchedPlan参数说明参数名输入/输出描述handleasdBlasHandle输入算子的句柄返回值返回状态码具体参见SiP返回码。asdBlasCgemmBatched参数说明参数名输入/输出描述handleasdBlasHandle输入算子的句柄transaasdBlasOperation_t输入指定矩阵A是否需要转置取值必须为ASDBLAS_OP_N。transbasdBlasOperation_t输入指定矩阵B是否需要转置取值必须为ASDBLAS_OP_N。mint64_t输入矩阵C的行数取值范围为{1-32}。nint64_t输入矩阵C的列数取值范围为{1-32}。k int64_t输入矩阵A和B的公共维度取值范围为{1-32}。lda int64_t输入A左右相邻元素间的内存地址偏移量取值和k相等。ldb int64_t输入B左右相邻元素间的内存地址偏移量取值和n相等。ldc int64_t输入C左右相邻元素间的内存地址偏移量取值和n相等。AaclTensor *输入输入的矩阵对应公式中的A数据类型支持COMPLEX64。数据格式支持ND。shape为[batchCount, m, k]。BaclTensor *输入输入的矩阵对应公式中的B数据类型支持COMPLEX64。数据格式支持ND。shape为[batchCount, k, n]。CaclTensor *输出对应公式中的C数据类型支持COMPLEX64。数据格式支持ND。shape为[batchCount, m, n]。alphastd::complexfloat 输入对应公式中的alpha复数标量用于乘以矩阵乘法的结果取值必须为10j。betastd::complexfloat 输入对应公式中的beta复数标量用于乘以矩阵C。取值必须为 00j。。batchCountint64_t输入批次数量。取值范围为{12 - 26208}。返回值返回状态码具体参见SiP返回码。约束说明算子实际计算时只支持3维ND运算。算子输入数据为行主序输入shape为[batchCount, m, k]、[batchCount, k, n]、[batchCount, m, n]输出shape为[batchCount, m, n]。调用示例示例代码如下该样例旨在提供快速上手、开发和调试算子的最小化实现其核心目标是使用最精简的代码展示算子的核心功能而非提供生产级的安全保障。不推荐用户直接将示例代码作为业务代码若用户将示例代码应用在自身的真实业务场景中且发生了安全问题则需用户自行承担。#include iostream #include vector #include asdsip.h #include acl/acl.h #include acl_meta.h using namespace AsdSip; #define ASD_STATUS_CHECK(err) \ do { \ AsdSip::AspbStatus err_ (err); \ if (err_ ! AsdSip::ErrorType::ACL_SUCCESS) { \ std::cout Execute failed. std::endl; \ exit(-1); \ } else { \ std::cout Execute successfully. std::endl; \ } \ } while (0) #define CHECK_RET(cond, return_expr) \ do { \ if (!(cond)) { \ return_expr; \ } \ } while (0) #define LOG_PRINT(message, ...) \ do { \ printf(message, ##__VA_ARGS__); \ } while (0) int64_t GetShapeSize(const std::vectorint64_t shape) { int64_t shapeSize 1; for (auto i : shape) { shapeSize * i; } return shapeSize; } int Init(int32_t deviceId, aclrtStream *stream) { // 固定写法acl初始化 auto ret aclInit(nullptr); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(aclInit failed. ERROR: %d\n, ret); return ret); ret aclrtSetDevice(deviceId); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(aclrtSetDevice failed. ERROR: %d\n, ret); return ret); ret aclrtCreateStream(stream); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(aclrtCreateStream failed. ERROR: %d\n, ret); return ret); return 0; } template typename T int CreateAclTensor(const std::vectorT hostData, const std::vectorint64_t shape, void **deviceAddr, aclDataType dataType, aclTensor **tensor) { auto size GetShapeSize(shape) * sizeof(T); // 调用aclrtMalloc申请device侧内存 auto ret aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(aclrtMalloc failed. ERROR: %d\n, ret); return ret); // 调用aclrtMemcpy将host侧数据复制到device侧内存上 ret aclrtMemcpy(*deviceAddr, size, hostData.data(), size, ACL_MEMCPY_HOST_TO_DEVICE); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(aclrtMemcpy failed. ERROR: %d\n, ret); return ret); // 计算连续tensor的strides std::vectorint64_t strides(shape.size(), 1); for (int64_t i shape.size() - 2; i 0; i--) { strides[i] shape[i 1] * strides[i 1]; } // 调用aclCreateTensor接口创建aclTensor *tensor aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr); return 0; } void printTensor(std::vectorstd::complexfloat tensorData, int64_t batch, int64_t rows, int64_t cols) { for (int64_t b 0; b batch; b) { for (int64_t i 0; i rows; i) { for (int64_t j 0; j cols; j) { auto data tensorData[b * rows * cols i * cols j]; std::cout ( (float)data.real() , (float)data.imag() ) ; } std::cout std::endl; } std::cout std::endl; } } int main(int argc, char **argv) { int deviceId 0; aclrtStream stream; auto ret Init(deviceId, stream); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(Init acl failed. ERROR: %d\n, ret); return ret); int batch 2; int m 3; int k 3; int n 3; asdBlasOperation_t transA asdBlasOperation_t::ASDBLAS_OP_N; asdBlasOperation_t transB asdBlasOperation_t::ASDBLAS_OP_N; std::complexfloat alpha std::complexfloat(1.0f, 0.0f); std::complexfloat beta std::complexfloat(0.0f, 0.0f); int64_t lda k; int64_t ldb n; int64_t ldc n; const int64_t tensorASize batch * m * k; const int64_t tensorBSize batch * k * n; const int64_t tensorCSize batch * m * n; std::vectorstd::complexfloat tensorInAData; tensorInAData.reserve(tensorASize); for (int i 0; i tensorASize; i) { tensorInAData.push_back(std::complexfloat(1.0f, i 0.0f)); } std::vectorstd::complexfloat tensorInBData; tensorInBData.reserve(tensorBSize); for (int i 0; i tensorBSize; i) { tensorInBData.push_back(std::complexfloat(1.0f, i 0.0f)); } std::vectorstd::complexfloat tensorInCData; tensorInCData.reserve(tensorCSize); for (int i 0; i tensorCSize; i) { tensorInCData.push_back(std::complexfloat(1.0f, i 0.0f)); } std::vectorint64_t matAShape {batch, m, k}; std::vectorint64_t matBShape {batch, k, n}; std::vectorint64_t matCShape {batch, m, n}; aclTensor *matA nullptr; aclTensor *matB nullptr; aclTensor *matC nullptr; void *matADeviceAddr nullptr; void *matBDeviceAddr nullptr; void *matCDeviceAddr nullptr; ret CreateAclTensorstd::complexfloat( tensorInAData, matAShape, matADeviceAddr, aclDataType::ACL_COMPLEX64, matA); CHECK_RET(ret ::ACL_SUCCESS, return ret); ret CreateAclTensorstd::complexfloat( tensorInBData, matBShape, matBDeviceAddr, aclDataType::ACL_COMPLEX64, matB); CHECK_RET(ret ::ACL_SUCCESS, return ret); ret CreateAclTensorstd::complexfloat( tensorInCData, matCShape, matCDeviceAddr, aclDataType::ACL_COMPLEX64, matC); CHECK_RET(ret ::ACL_SUCCESS, return ret); std::cout alpha ( (float) alpha.real() , (float) alpha.imag() ) std::endl; std::cout beta ( (float) beta.real() , (float) beta.imag() ) std::endl; std::cout ------- input TensorInA ------- std::endl; printTensor(tensorInAData, batch, m, k); std::cout ------- input TensorInB ------- std::endl; printTensor(tensorInBData, batch, k, n); asdBlasHandle handle; asdBlasCreate(handle); size_t lwork 0; void *buffer nullptr; asdBlasMakeCgemmBatchedPlan(handle); asdBlasGetWorkspaceSize(handle, lwork); std::cout lwork lwork std::endl; if (lwork 0) { ret aclrtMalloc(buffer, static_castint64_t(lwork), ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(allocate workspace failed. ERROR: %d\n, ret); return ret); } asdBlasSetWorkspace(handle, buffer); asdBlasSetStream(handle, stream); ASD_STATUS_CHECK(asdBlasCgemmBatched(handle, transA, transB, m, n, k, alpha, matA, lda, matB, ldb, beta, matC, ldc, batch)); asdBlasSynchronize(handle); asdBlasDestroy(handle); ret aclrtMemcpy(tensorInCData.data(), tensorCSize * sizeof(std::complexfloat), matCDeviceAddr, tensorCSize * sizeof(std::complexfloat), ACL_MEMCPY_DEVICE_TO_HOST); CHECK_RET(ret ::ACL_SUCCESS, LOG_PRINT(copy result from device to host failed. ERROR: %d\n, ret); return ret); std::cout ------- output TensorInC ------- std::endl; printTensor(tensorInCData, batch, m, n); aclDestroyTensor(matA); aclDestroyTensor(matB); aclDestroyTensor(matC); aclrtFree(matADeviceAddr); aclrtFree(matBDeviceAddr); aclrtFree(matCDeviceAddr); aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/sip CgemmBatched算子

HCgemmBatched 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 产品支持情况 产品是否支持Atlas 200I/500 A2 …...

AI赋能眼科诊疗:深度学习在视网膜疾病影像分析中的实践与展望

1. 项目概述:当AI遇见眼底世界作为一名长期关注医疗科技交叉领域的从业者,我亲眼见证了人工智能从实验室概念演变为临床医生得力助手的过程。在所有医学影像分析的应用中,眼科,尤其是视网膜疾病的诊疗,堪称AI落地最成功…...

鸿蒙PC多端适配的断点设计与布局策略

踩坑记录25:多端适配的断点设计与布局策略 阅读时长:10分钟 | 难度等级:高级 | 适用版本:HarmonyOS NEXT (API 12) 关键词:GridRow、GridCol、断点系统、响应式布局 声明:本文基于真实项目开发经历编写&…...

CANN/hccl:rank table配置资源信息(Atlas 300I Duo 推理卡)

rank table配置资源信息(Atlas 300I Duo 推理卡) 【免费下载链接】hccl 集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可…...

GitHub Profile动态化:用SVG与Twitter API打造个人技术名片

1. 项目概述与核心价值 最近在折腾个人主页和博客的访客统计时,发现了一个挺有意思的开源项目—— tommyjepsen/twblocks 。简单来说,这是一个能让你在GitHub个人主页(就是那个README.md文件)上,动态展示你最近在Tw…...

机器学习性能基线:Zero Rule算法原理与Weka实践

1. 为什么需要机器学习性能基线在开始任何机器学习项目时,建立一个性能基线就像盖房子前打地基一样重要。想象一下,如果你要参加一场考试,但不知道及格线是多少,即使你考了80分,也无法判断这个成绩是好是坏。同样地&am…...

CANN/metadef GenerateTask接口

GenerateTask 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 GenerateTask阶段具体Task的生成和处理。 函数原型 OpImplRegisterV2 &GenerateTask(OpGenTaskKernelFunc gen_task_func)参数说明 参数…...

基于GPT的Python 2到3代码迁移:原理、实践与避坑指南

1. 项目概述:当Python代码库遇上GPT的“翻译官”最近在折腾一个老项目,里面有不少用Python 2.7写的脚本,维护起来真是让人头疼。Python 2在2020年就正式退役了,但很多遗留系统、历史数据脚本,甚至是一些特定硬件设备的…...

SwiftUI Pro Agent Skill:提升AI生成代码质量的专业技能包

1. 项目概述:为AI编程助手注入SwiftUI专家经验 如果你和我一样,在日常开发中已经离不开AI编程助手(比如Claude Code、Cursor、Codex),那你肯定也遇到过类似的困扰:它们生成的SwiftUI代码,乍一看…...

CANN/ge:AscendIR图引擎中间表示设计

AscendIR — 图引擎的中间表示设计 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 P…...

CANN/cannbot-skills Flash Attention内核深度分析

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

从开发者视角体验Taotoken文档中Python与Node示例的易用性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从开发者视角体验Taotoken文档中Python与Node示例的易用性 作为一名刚接触大模型API的开发者,我最近注册并尝试了Taoto…...

医疗AI公平性挑战:破解非洲部署中的数据偏见与技术鸿沟

1. 项目概述:当AI遇见非洲医疗,公平性为何成为一道必答题?如果你关注过全球医疗科技的前沿,一定会对人工智能(AI)在影像诊断、药物研发和个性化治疗中展现的潜力感到兴奋。但当我们把目光投向非洲大陆&…...

Fairseq-Dense-13B-Janeway入门必看:Temperature/Top-p参数调优对创意写作影响的实测分析

Fairseq-Dense-13B-Janeway入门必看:Temperature/Top-p参数调优对创意写作影响的实测分析 1. 模型简介与快速上手 Fairseq-Dense-13B-Janeway是KoboldAI发布的130亿参数创意写作大模型,专门针对科幻与奇幻题材进行优化训练。该模型使用2210本科幻与奇幻…...

偏导数与梯度向量:多维空间变化率的本质与应用

1. 理解偏导数与梯度向量的核心价值第一次接触偏导数这个概念时,我正试图优化一个简单的二元函数模型。当时完全不明白为什么需要对每个变量"单独求导",直到看到梯度下降法的实际应用才恍然大悟。偏导数和梯度向量远不止是数学课本上的抽象符号…...

Taotoken提供的标准OpenAI协议兼容性实际体验分享

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken提供的标准OpenAI协议兼容性实际体验分享 在将应用从直接调用单一模型厂商的接口迁移到聚合平台时,开发者最关…...

Oumuamua-7b-RP真实作品:基于‘贵族女仆’设定的料理指导+生活关怀对话

Oumuamua-7b-RP真实作品:基于贵族女仆设定的料理指导生活关怀对话 1. 项目介绍 Oumuamua-7b-RP 是一款专为日语角色扮演对话设计的Web界面应用,基于Mistral-7B大语言模型架构开发。它能够模拟各种角色进行自然流畅的对话,特别适合创建沉浸式…...

通过用量看板观察不同模型API调用的Token消耗与成本分布

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板观察不同模型API调用的Token消耗与成本分布 对于使用多个大模型API的开发者而言,清晰、透明地掌握每一次调…...

生成式AI社会风险评估:从技术原理到治理框架的实践指南

1. 生成式AI的社会技术风险全景:从技术原理到现实挑战生成式AI,特别是以GPT系列、Claude等为代表的大语言模型,已经从一个前沿研究课题,迅速演变为重塑信息生产、分发与消费方式的核心技术。作为一名长期关注信息检索与内容系统演…...

Phi-4-mini-flash-reasoning行业落地:IT运维故障逻辑链自动推演案例

Phi-4-mini-flash-reasoning行业落地:IT运维故障逻辑链自动推演案例 1. 引言:IT运维的痛点与AI解决方案 IT运维工程师每天都要面对各种系统故障,从服务器宕机到网络异常,从数据库连接失败到应用性能下降。传统排查方式依赖工程师…...

Taotoken的APIKey管理与访问控制功能切实提升了安全性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的APIKey管理与访问控制功能切实提升了安全性 在构建基于大模型的应用时,API密钥的管理与访问控制是项目安全架…...

CANN/driver DCMI设备cgroup信息获取

dcmi_get_device_cgroup_info 【免费下载链接】driver 本项目是CANN提供的驱动模块,实现基础驱动和资源管理及调度等功能,使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_cgroup_info(int card_id, in…...

Oumuamua-7b-RP效果展示:温度0.3 vs 1.2下角色性格稳定性对比实测

Oumuamua-7b-RP效果展示:温度0.3 vs 1.2下角色性格稳定性对比实测 1. 测试背景与目的 Oumuamua-7b-RP 是一个基于Mistral-7B架构的日语角色扮演专用大语言模型,专为沉浸式角色对话体验设计。本次测试将重点对比不同温度参数(0.3与1.2&#…...

自动驾驶AI算法演进:从L0到L5的技术跃迁与工程挑战

1. 自动驾驶AI算法演进:从辅助到全能的逻辑跃迁 自动驾驶,这个曾经只存在于科幻电影中的概念,如今正以前所未有的速度驶入现实。作为一名在汽车电子与智能驾驶领域摸爬滚打了十多年的工程师,我亲眼见证了这场技术革命是如何从实验…...

新能源车维修成本畸高,行业垄断与技术壁垒让车主陷入“买得起修不起“困境

最近朋友圈里一位朋友吐槽,他的特斯拉Model Y倒车时不小心蹭了一下墙角,去4S店报价20万维修费。要知道这车当时买也就28万,修一下车就快赶上车价的一半了。他苦笑着说:"这哪是修车,简直是半卖半送啊!&…...

Orangutan算法:仿生视觉注意力机制在计算机视觉中的应用

1. 项目概述:当计算机开始“像猴子一样看世界”在计算机视觉领域,我们一直在追求让机器“看得更准”、“理解更深”。从早期的边缘检测、SIFT特征点,到如今席卷一切的深度卷积神经网络,模型的性能在标准数据集上屡创新高。但不知道…...

新手教程使用Python和OpenAI兼容SDK五分钟接入Taotoken大模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手教程使用Python和OpenAI兼容SDK五分钟接入Taotoken大模型服务 本文面向刚开始接触大模型API调用的开发者,旨在提供…...

大模型参数规模与性能的非线性关系:从规模迷信到精准设计

1. 项目概述:从“大力出奇迹”到“精打细算”的模型规模探索在AI领域,尤其是大语言模型(LLM)的研发竞赛中,“参数规模”一度被视为衡量模型能力的黄金标准。从业者们普遍信奉“规模定律”,认为只要堆叠更多…...

CANN/torchtitan-npu版本策略

版本策略(Versioning Policy) 【免费下载链接】torchtitan-npu Ascend Extension for torchtitan 项目地址: https://gitcode.com/cann/torchtitan-npu torchtitan-npu 采用“分支 commit 基线”的方式与上游 torchtitan 保持对齐。 本政策用于定…...

CANN ops-cv图模式适配指南

图模式适配指南 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 概述 本文档介绍自定义算子的图模式适配方法,整体流程与算子开发指南&#x…...