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

使用 BLAS 调用加快生成的独立代码中的矩阵运算

为了提高某些低级向量生成的代码的执行速度,并 矩阵运算(如矩阵乘法)在独立代码中,指定您 要MATLAB Coder™®生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库,它具有 几个高度优化的机器特定实现。代码生成器使用 CBLAS C 接口来 哎呀。如果指定要生成 BLAS 调用,并且 矩阵函数满足特定条件,代码生成器生成 BLAS 调用。 否则,代码生成器将为矩阵函数生成代码。

对于独立代码中的 BLAS 调用,MATLAB Coder 使用您指定的 BLAS 库。指定针对您的执行环境进行优化的 BLAS 库。

指定 BLAS 库

若要在独立代码中生成 BLAS 调用,必须有权访问 BLAS Callback 类。BLAS 回调类指定 BLAS 库、CBLAS 头文件、 特定 CBLAS 接口使用的某些 C 数据类型,以及编译器和 生成过程的链接器选项。执行下列操作之一:

在命令行中,将代码配置对象属性设置为回调的名称 类。CustomBLASCallback

在 MATLAB 中 Coder app,将 Custom BLAS library callback 设置为回调类的名称。

编写 BLAS 回调类

若要在生成的代码中生成对特定 BLAS 库的调用,请编写 BLAS 回调类。与希望在独立代码中使用此 BLAS 库进行 BLAS 调用的其他人共享回调类。

回调类必须派生自抽象类编码器。BLASCallback的。此示例是回调类的实现,用于与 Windows 平台上的英特尔 MKL BLAS 库集成。mklcallback®

classdef mklcallback < coder.BLASCallbackmethods (Static)function updateBuildInfo(buildInfo, ~)libPath = fullfile(pwd,'mkl','WIN','lib','intel64');libPriority = '';libPreCompiled = true;libLinkOnly = true;libs = {'mkl_intel_ilp64.lib' 'mkl_intel_thread.lib' 'mkl_core.lib'};buildInfo.addLinkObjects(libs, libPath, libPriority, libPreCompiled, ...libLinkOnly);buildInfo.addLinkObjects('libiomp5md.lib',fullfile(matlabroot,'bin', ...'win64'), libPriority, libPreCompiled, libLinkOnly);buildInfo.addIncludePaths(fullfile(pwd,'mkl','WIN','include'));buildInfo.addDefines('-DMKL_ILP64');endfunction headerName = getHeaderFilename()headerName = 'mkl_cblas.h';endfunction intTypeName = getBLASIntTypeName()intTypeName = 'MKL_INT';endend
end

必须提供 、 和 方法。该方法返回 CBLAS 头文件 名字。如果您使用的是其他 BLAS 库,请替换为 CBLAS 头文件的名称。该方法返回 CBLAS 接口使用的整数数据类型的名称。如果你 正在使用不同的 BLAS 库,请替换为 特定于 CBLAS 接口的整数数据类型。该方法提供了 构建过程以链接到 BLAS 库。使用类似于示例中的代码的代码 callback 类指定头文件的位置,BLAS 的完整路径名 库,以及编译器和链接器选项。如果您使用英特尔 MKL BLAS 库,请使用 Link Line Advisor,用于查看哪些库和编译器选项 推荐用于您的用例。getHeaderFilenamegetBLASIntTypeNameupdateBuildInfogetHeaderFilenamemkl_cblas.hgetBLASIntTypeNameMKL_INTupdateBuildInfo

中已经实现了其他三种方法。这些方法是 、 和 。默认情况下,您的回调类 继承了这些实现。在某些 情况下,在定义时,必须使用自己的定义覆盖这些方法 你的回调类。coder.BLASCallbackgetBLASDoubleComplexTypeNamegetBLASSingleComplexTypeNameuseEnumNameRatherThanTypedefcoder.BLASCallback

该方法返回用于 生成代码中的双精度复变量。如果您的 BLAS 库采用 除 和 for 以外的类型 双精度复数组参数,将此方法包含在回调类中 定义。getBLASDoubleComplexTypeNamedoublevoid

function doubleComplexTypeName = getBLASDoubleComplexTypeName()
doubleComplexTypeName = 'my_double_complex_type';
end

替换为 BLAS 库采用的类型 用于双精度复数组参数。my_double_complex_type

该方法返回用于 生成代码中的单精度复变量。如果您的 BLAS 库采用 除 和 for 以外的类型 单精度复数组参数,将此方法包含在回调类中 定义。getBLASSingleComplexTypeNamefloatvoid

function singleComplexTypeName = getBLASSingleComplexTypeName()
doubleComplexTypeName = 'my_single_complex_type';
end

替换为 BLAS 库采用的类型 用于单精度复数组参数。my_single_complex_type

该方法返回 违约。如果 BLAS 库中的枚举类型包含关键字,请重新定义此方法以在回调类定义中返回。useEnumNameRatherThanTypedeffalseenumtrue

function p = useEnumNameRatherThanTypedef()
p = true;
end

包含关键字的生成 C 源代码的摘录如下:enum

enum CBLAS_SIDE t;
enum CBLAS_UPLO b_t;
double temp;
enum CBLAS_TRANSPOSE c_t;
enum CBLAS_DIAG d_t;

通过指定 BLAS 回调类生成 BLAS 调用

此示例演示如何生成在特定 BLAS 库中调用 BLAS 函数的代码。 BLAS 回调类指定 BLAS 库 想要在此示例中使用。useMyBLAS

编写一个 MATLAB 函数,该函数调用函数进行基本矩阵运算。 例如,编写一个乘法函数 两个矩阵和 .myMultiplyAB

function C = myMultiply(A,B) %#codegen
C = A*B;
end

动态定义静态库的代码配置对象 链接库或可执行程序。例如,定义配置 对象,用于 Windows 平台上的动态链接库。

cfg = coder.config('dll');

指定 BLAS 回调类 。useMyBLAS

cfg.CustomBLASCallback = 'useMyBLAS';

回调类必须位于 MATLAB 路径上。

生成代码。指定输入和 是 1000×1000 的双精度数组。AB

codegen myMultiply -args {zeros(1000),zeros(1000)} -config cfg -report

如果 和 足够大,则 代码生成器为矩阵乘法生成 BLAS 调用 功能。AB

在执行环境中找到 BLAS 库

BLAS 库必须在您的执行环境中可用。如果您的 BLAS 库是 shared,则使用环境变量或链接器选项来指定 BLAS 库的位置。

在 Windows 平台上,修改 PATH 环境变量。

在 Linux 平台上,修改 LD_LIBRARY_PATH 环境变量或 使用链接器选项。®rpath

在 macOS 平台上,修改 DYLD_LIBRARY_PATH 环境变量或 使用链接器选项。rpath

若要指定链接器选项,请使用 BLAS 回调类的方法中的 information 方法。为 示例,对于 GCC 编译器:rpathaddLinkFlagsupdateBuildInfo

buildInfo.addLinkFlags(sprintf(‘-Wl,-rpath,“%s”’,libPath));

OpenBLAS 库的使用说明和限制

如果生成的代码包含对 OpenBLAS 库函数的调用,请按照以下步骤操作 这些准则和限制:

如果生成包含对 OpenBLAS 库函数的调用的 C++ 代码, 使用该选项编译它会产生警告。自 禁用编译器选项,将这些行包含在 方法:-pedantic-pedanticupdateBuildInfo

if ctx.getTargetLang() == 'C++'buildInfo.addCompileFlags('-Wno-pedantic');
end

OpenBLAS 不支持 C89/C90 标准。

相关文章:

使用 BLAS 调用加快生成的独立代码中的矩阵运算

为了提高某些低级向量生成的代码的执行速度&#xff0c;并 矩阵运算&#xff08;如矩阵乘法&#xff09;在独立代码中&#xff0c;指定您 要MATLAB Coder™生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库&#xff0c;它具有 几个高度优化的机器特定实现。代码生成…...

一台服务器,最大支持的TCP连接数是多少?

一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 一、原理 TCP 四元组的信息&#xff1a;源IP、源端口、目标IP、目标端口。 一个服务端进程最大能支持的 TCP 连接个数的计算公式&#xff1a;最大tcp连接数客户端的IP…...

微信小程序云开发教程——墨刀原型工具入门(编辑页面)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…...

flutter打包app

Flutter 打包APP &#xff08;Android & IOS&#xff09;_encountered error while building for device.-CSDN博客 使用命令行 keytool -genkey -v -keystore ../key -keyalg RSA -keysize 2048 -validity 10000 -alias key 将在文件根目录上一层生成key文件&#xff0…...

力扣543. 二叉树的直径

Problem: 543. 二叉树的直径 文章目录 题目描述思路复杂度Code 题目描述 思路 1.最大直径 左子树的最大深度 右子树的最大深度&#xff1b; 2.定义一个变量maxDiameter记录最大直径&#xff0c;并编写一个递归函数maxDepth&#xff0c;利用树的后序遍历每次递归求取leftMax&a…...

python网络爬虫教程笔记(1)

系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么&#xff1f;2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理&#xff1a;证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手&#xff0c;4次挥手过程 总结…...

C# 异步返回类型详解

在现代软件开发中&#xff0c;异步编程已经成为一种重要的编程范式&#xff0c;尤其是在需要与I/O密集型操作交互的上下文中&#xff0c;比如网络请求、数据库操作等。C# 语言提供了强大的异步支持&#xff0c;使得异步编程变得更加简单和直观。本文将详细介绍C#中异步返回类型…...

BAT等大厂必问技术面试题,【2024Android最新学习路线

下面分享一下我在爱奇艺的面经 面试前的话&#xff1a;在面试时一定不要受前面没有过的面试的影响&#xff0c;一定要有一个好的心态&#xff0c;不要面试还没开始就自己把自己思绪搞乱了 一共进行了4轮面试 爱奇艺一面 50min 项目 主要介绍了以前做过的项目&#xff0c;分析…...

72. 编辑距离【leetcode】/动态规划难

72. 编辑距离 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “horse”, word2 “ros”…...

【MySQL】视图、索引

目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突&#xff01;&#xff01;&#xff01; B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…...

反编译java生成的.class文件

java代码编译后生成xxx.class文件&#xff0c;有时候需要反编译这个class文件看代码是怎么写的&#xff0c;可以使用下面这个工具。 工具已经上传到资源&#xff0c;链接&#xff1a; https://download.csdn.net/download/weixin_42556307/88915887 具体使用如下&#xff1a; …...

Cookie 探秘:了解 Web 浏览器中的小甜饼

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

Python线性代数数字图像和小波分析之二

要点 数学方程&#xff1a;数字信号和傅里叶分析&#xff0c;离散时间滤波器&#xff0c;小波分析Python代码实现及应用变换过程&#xff1a; 读取音频和处理音频波&#xff0c;使用Karplus-强算法制作吉他音频离散傅里叶计算功能和绘制图示结果计算波形傅里叶系数正向和反向&…...

LC.exe”已退出,代码为 -1

尽管网络上已经有许多详尽的说明和资料&#xff0c;但鉴于个人对大量文字的理解有反感&#xff0c;我就写一个更为直观、简洁的方式来呈现我的解决方案。 1.问题图片。 2.删除licenses.licx 3.问题解决...

springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略

导入达梦数据库对hibernate的方言包 <dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.6</artifactId><version>8.1.2.192</version></dependency>配置文件中添加方言配置和主键生成策略配置…...

Redis优化与应用

Redis性能调优 - Redis的性能调优是一个比较复杂的过程&#xff0c;需要从多个方面进行优化&#xff0c;如内存使用、命令使用等。 - 案例&#xff1a;减少不必要的持久化操作。默认情况下&#xff0c;Redis会执行RDB和AOF两种持久化方式。如果不需要持久化&#xff0c;或者可…...

深入了解Kafka的文件存储原理

Kafka简介 Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性&#xff0c;但是在设计实现上完全不同&#xff0c;此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类&#xff0c;发送消息者称为Producer&…...

RabbitMQ 高级

在昨天的练习作业中&#xff0c;我们改造了余额支付功能&#xff0c;在支付成功后利用RabbitMQ通知交易服务&#xff0c;更新业务订单状态为已支付。 但是大家思考一下&#xff0c;如果这里MQ通知失败&#xff0c;支付服务中支付流水显示支付成功&#xff0c;而交易服务中的订单…...

音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)

本文主要讲解的是音频基础概念、交叉编译原理和实践&#xff08;LAME的交叉编译&#xff09;&#xff0c;是基于Android平台&#xff0c;示例代码如下所示&#xff1a; AndroidAudioDemo 音频基础概念 在进行音频开发的之前&#xff0c;了解声学的基础还是很有必要的。 声音…...

直播美颜SDK开发指南:构建个性化的主播美颜工具

本篇文章&#xff0c;小编将带您深入了解如何构建个性化的主播美颜工具&#xff0c;从而为用户提供更优质的直播体验。 一、美颜技术概述 在开始SDK的开发之前&#xff0c;我们首先需要了解美颜技术的基本原理。美颜技术通常包括肤色检测、人脸检测、特征点定位、滤镜处理等步…...

Buzz:离线环境下音频转录与翻译的完整解决方案

Buzz&#xff1a;离线环境下音频转录与翻译的完整解决方案 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz 在当今信息驱动的工…...

别再死记硬背MVC了!通过Unity连连看实战,我搞懂了数据与UI分离的5个真实好处

从连连看实战看数据与UI分离的五大工程化收益 在游戏开发领域&#xff0c;设计模式常常被视为"高级概念"而被初学者敬而远之。但当我真正在Unity中实现一个简单的连连看游戏时&#xff0c;才深刻体会到MVC模式中数据与UI分离带来的实际价值。这不是教科书上的理论说教…...

如何高效突破Cursor试用限制:全功能AI编程助手解锁指南

如何高效突破Cursor试用限制&#xff1a;全功能AI编程助手解锁指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…...

【原创改进代码】考虑电动汽车移动储能特性的多区域电网功率波动平抑优化调控附python代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子…...

一个月突变!Linux内核大佬懵了:上个月还是“AI垃圾”,这个月AI Bug报告却突然靠谱?

整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;最近在做开源项目维护的开发者&#xff0c;可能会有一种奇怪的错觉&#xff1a;Bug 似乎报告变多了&#xff0c;而且变准了——更准确地说&#xff0c;是 AI 报的 Bug&#xff0c;突然开始“靠谱了”。…...

根据以上内容,可拟定的标题为:“MATLAB仿真复现光纤激光器中耗散孤子共振DSR的演化过程:...

MATLAB仿真复现耗散孤子共振DSR 根据谱方法求解复立方五次方金兹堡朗道方程 获得光纤激光器中耗散孤子的演化过程耗散孤子共振光纤激光器仿真平台&#xff1a;从 Ginzburg-Landau 方程到多维度脉冲演化分析—— 一套可扩展、可配置、可动画的 MATLAB 谱方法框架一、背景与需求高…...

GLM-4.1V-9B-Base应用场景:建筑图纸关键结构识别与中文描述生成

GLM-4.1V-9B-Base应用场景&#xff1a;建筑图纸关键结构识别与中文描述生成 1. 建筑行业的AI视觉革命 在建筑设计领域&#xff0c;图纸解读一直是项耗时费力的工作。设计师需要花费大量时间分析图纸中的结构细节&#xff0c;撰写技术说明文档。传统的人工识别方式不仅效率低下…...

快马平台十分钟速建:openclaw机器人抓取参数可视化配置原型

最近在做一个机器人抓取控制的项目&#xff0c;需要快速搭建一个openclaw的参数配置界面。作为一个前端开发经验不多的工程师&#xff0c;我惊喜地发现InsCode(快马)平台可以帮我快速实现这个需求。下面分享下我的实现过程。 首先明确需求 这个配置工具需要实现五个核心功能&a…...

2026年硕士论文降AIGC率必备工具:4款实测效果对比

试了四五款工具&#xff0c;最后留下来的就这几个。先说结论&#xff1a;降AIGC率这个需求&#xff0c;嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;是目前性价比最高的选择&#xff0c;4.8元/千字&#xff0c;达标率99.26%。 如果对价格不敏感、对知网特别严格&#…...

ESP8266天气时钟DIY全攻略:从零搭建到个性化定制

1. 硬件准备与成本控制 作为一个玩了多年智能硬件的爱好者&#xff0c;我强烈推荐从ESP8266开始入门物联网项目。这款芯片的价格实在太香了&#xff0c;9块钱就能买到NodeMCU开发板&#xff0c;性能却足够应付大多数DIY场景。我去年做过统计&#xff0c;用ESP8266搭建的天气时钟…...