首页 > 编程语言 >matlab程序性能优化与混合编程技术介绍

matlab程序性能优化与混合编程技术介绍

时间:2023-11-07 11:35:02浏览次数:41  
标签:函数 代码 矩阵 C语言 matlab 使用 编程技术 优化

matlab程序代码优化,性能优化

 

Matlab是一种强大的计算工具,方便的矩阵运算与工具箱为编程人员提供了极大的便利。但是其性能的缺失使得处理一些大计算量问题时显得效率不高,matlab程序的优化应从几个方面展开:

1.矩阵提前分配空间,矩阵第一次使用之后避免改变矩阵的维数。

2.尽量使用矩阵运算,少使用循环。

3.调用多次的计算代码写成函数形式,而不是写在脚本程序中,因为Matlab中,函数是被翻译成微码的,执行效率更高。

4.如果无法避免使用循环,可以使用混合编程技术实现该段代码,这种方法在循环次数很大时可以将性能提升数十倍甚至上百倍。

5.对于特定的算法,首先想到的不应是自己编写代码,而是查看matlab帮助文档,在matlab自带函数库中寻找是否存在现成函数。这样做有两个方面考虑,一方面matlab自带函数很多并不是真正的脚本文件,而是使用其他高级编程语言编译成的函数文件(这种函数文件的显著特点是打开该函数对应的m文件,会发现内容中只有注释而没有实际的代码,熟悉混合编程的同学看到这点会很熟悉,因为进行混合编程时,一般会创建一个和对应函数名相同的m文件用于保存注释信息。matlab的开发者也使用了这一规范,用户所看到的只是该函数的注释而已,实际的计算代码是保密的)使用这些函数,远比自己编写要高效;另一方面,使用自带函数,可以显著提高开发效率,减少编程者的工作量。

综合以上考虑,开发高效的matlab计算程序的步骤是:

1.需求分析:首先对所要实现的算法进行划分,哪些部分可以使用matlab的脚本语言进行处理,哪些部分可以使用混合编程技术实现。我个人倾向于对于核心的计算代码使用混合编程技术实现,数据的初始化、最后结果的可视化等使用matlab的脚本语言实现。这样选择的依据是核心计算代码使用混合编程技术实现后,真正的代码可以保密,对于用户,仅需提供其编译好的mex文件。另一方面,数据初始化需要很多数据处理代码,如果使用C语言实现,意味着大量的循环,而使用matlab可以用矩阵的方式处理而避免使用循环,编程容易而且不易出错。最后,结果的可视化一般需要调用底层的库,而使用C语言实现这些调用显然不如直接使用matlab容易。

2.编写计算代码:分析好各个计算流程应该使用的编程方法之后,下一步就是对算法进行实现,这一过程需要到前面介绍的几个技巧,如矩阵提前分配空间,不要随便改变矩阵的维数等等。这部分最好分模块书写,各个部分之间做好封装和隔离,特别是混合编程时,使用C语言编写的代码要做好注释,我的个人习惯是C语言中用到的变量和m文件中的一样,这样可以方便识别和debug。使用混合编程技术时,C语言编写的代码是在matlab环境下进行编译的,这就使得debug变得极其困难,现在版本的Matlab还不支持对C语言代码进行debug,C函数运行过程中变量的监视几乎是不可能的。为了解决这一问题,我个人喜欢在专业的C编译环境下进行编程(如VC),将整个C函数可以分解为三个部分:1.数据输入;2.数据处理;3.结果保存。这三个部分中,第1个和第3个部分主要使用matlab的语法规则处理,而核心的第2部分,则是使用通用的C语言语法。实际debug主要关注的是第2个部分,于是我们可以在VC中编写一个测试版本的函数,这个函数中,所有内容都是和传统的C语言规范一样,debug完成后,修改其数据输入和输出部分的代码,使其满足C-MEX标准,之后把这一修正的代码到matlab环境下进行编译。

3.模块耦合。通过第二步,我们已经获得了所有计算模块,且各个模块都已经没有bug,可以独立运行了,但是模块独立运行并不代表整个程序可以很好的工作,这一步所做的工作就是将各个模块进行耦合、拼接、调试,直到各个模块运行完好。前面第二步如果处理的好,这一步将会十分容易,即使存在bug,由于各个模块间隔离的很好,可以很方便的进行修正。

标签:函数,代码,矩阵,C语言,matlab,使用,编程技术,优化
From: https://blog.51cto.com/emanlee/8228753

相关文章

  • Matlab命令集--常用字符串函数
    Matlab命令集--常用字符串函数常用函数eval :运行字符串表示的表达式char :将数组变成字符串double:将数字字符串变成数字字符串操作deblank:去掉字符串末尾的空格findstr:查找字符串lower  :转换为小写strcat :字符串连接组合strcmp :字符串比较strcmpi:字符串比较(......
  • 凸优化 | Lagrange 对偶:极大极小不等式的证明
    背景:Lagrange对偶:对于优化问题\[\begin{aligned}&\mathrm{minimize}~~&f_0(x)\\&\mathrm{subject~to}~~&f_i(x)\le0,~~h_j(x)=0\end{aligned}\]可以建立其Lagrange对偶函数\(L(x,λ,\nu)=f_0(x)+\sumλ_if_i(x)+\sum\nu_jh_j(x)\),\......
  • 大模型训练对底层模型的影响及优化策略
    在深度学习和人工智能领域,模型训练是实现算法和应用的关键步骤。然而,对于大型模型训练,人们普遍关注其性能和精度,而忽略了对底层模型的影响。本文将探讨“大模型训练会影响底模型吗”这一话题,分析可能的影响及应对策略。一、大模型训练对底层模型的影响计算资源占用大型模型训练需要......
  • cf1582F2. Korney Korneevich and XOR (hard version)(暴力优化)
    cf1582F2对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数才对后面可能有贡献,前面的......
  • linux登陆防护fail2ban的优化配置
    fail2ban默认在iptables防火墙filter表的input链内设置规则,这样导致端口映射,和nat转发的流量不在fail2ban控制内。如果修改配置文件/etc/fail2ban/action.d#viiptables-common.conf  把INPUT链修改成FORWARD链后存在同样问题,会导致进入主机的流量不受控。这里需要在IN......
  • matlab用Logistic逻辑回归建模和马尔可夫链蒙特卡罗MCMC方法分析汽车实验数据
    原文链接:http://tecdat.cn/?p=24103原文出处:拓端数据部落公众号 此示例说明如何使用逻辑回归模型进行贝叶斯推断。统计推断通常基于最大似然估计(MLE)。MLE选择能够使数据似然最大化的参数,是一种较为自然的方法。在MLE中,假定参数是未知但固定的数值,并在一定的置信度下进......
  • Sitecore 优化
    IIS优化1.设置AlwaysRunninng前往应用池选中对应的站点,点击高级设置,在StartMode那列选中AlwaysRunning,最后保存。2.设置PreloadEnabled为True在站点列选中你的站点,点击高级设置,将PreloadEnabled设置True,然后保存。3.设置doAppInitAfterRestart为True......
  • Flink_state 的优化与 remote_state 的探索
    摘要:本文整理自bilibili资深开发工程师张杨,在FlinkForwardAsia2022核心技术专场的分享。本篇内容主要分为四个部分:相关背景state压缩优化Remotestate探索未来规划一、相关背景1.1业务概况从业务规模来讲,B站目前大约是4000+的Flink任务,其中95%是SQL类型。从部署模......
  • 大模型训练中的速度与效率优化
    在人工智能和深度学习的时代,模型训练的速度和效率是决定科研和商业成功的关键因素之一。然而,在实践中,我们往往会遇到一些“坑”,其中最常见的之一就是模型训练速度过慢和GPU利用率低。在这篇文章中,我将详细描述我遇到的一个具体案例,并提供解决方案和经验总结。案例描述最近,我遇到一......
  • 利用预训练模型优化大模型训练
    在深度学习和人工智能领域,模型训练是一个复杂且耗时的过程。然而,通过采用预训练模型来训练新的模型,我们可以大大缩短这一过程,提高效率和准确性。预训练模型是一种经过大量数据训练,已经具备一定特征提取和表示能力的模型。这些模型通常作为通用的特征提取器,为各种不同的任务提供有力......