MATLAB code 加速

MATLAB code 加速


实验平台:联想小新air13 2018款,CPU-i5 8265U 4核心

参考视频链接 How to speed up MATLAB code.mp4

利用探查器对脚本语句进行改进

1、查看脚本运行时间

使用tictoc命令:

tic; randGrid_start; toc

时间已过 100.763126 秒。

2、step1 预分配内存

代码分析器如下图右方显示:

🍊 桔色代表可以进行一些改进,🍏绿色表示代码准备就绪。在这里插入图片描述上图显示: AB 矩阵随迭代次数变化,简单的改进为:为 AB 预分配内存,如代码randGrid_step1.m所示。

tic; randGrid_step1; toc

时间已过 1.180223 秒。

3、step2 使用 MATLAB 探查器

  • 进入探查器:主页 > 运行并计时
    在这里插入图片描述
  • a. 输入脚本名称, b. 点击开始探查,c. 进入函数
  1. 查看代码耗时较多语句:
    在这里插入图片描述
    ​ 显示在随机数分配耗时较多。

  2. 改进随机数分配,见代码randGrid_step2.m

    randGrid_step2.m进行探查
    在这里插入图片描述

4、step3 使用逻辑数组改进判断语句:

在这里插入图片描述
使用MATLAB逻辑索引进行向量化操作,见代码randGrid_step3.m
在这里插入图片描述
使用逻辑数组 idx, 满足条件即赋值。
在这里插入图片描述

使用多核心并行运算

1、 查看脚本运行时间

脚本randGridEig_start.m,计算矩阵的最大特征向量

tic; randGridEig_start; toc

时间已过 882.065692 秒。

大部分时间花在计算循环中特征值的部分,没法改进循环的可能性。

2、 利用多个核心进行计算

这种情况下,利用计算机的多个核心,分别计算每个循环迭代任务,然后合并结果。

使用Parallel Computing Toolbox来完成。

在命令行窗口输入:

>> parpool

创建MATLAB worker的并行池。

Starting parallel pool (parpool) using the ‘local’ profile …
connected to 4 workers.

ans =

Pool - 属性:

        Connected: true
       NumWorkers: 4
          Cluster: local
    AttachedFiles: {}
AutoAddClientPath: true
      IdleTimeout: 30 minutes (30 minutes remaining)
      SpmdEnabled: true

本机为4核心处理器。

for循环改为parfor循环:
在这里插入图片描述
查看运行时间:

tic; randGridEig_step1; toc

时间已过 731.125419 秒。

notes:

  • 执行并行任务会带来时间损失,例如通信开销和并行池设置,建议进行一些时间测试,以确保使用并行计算是值得的;
  • 所有的串行代码不一定适宜并行化

其他方法

Accelerating MATLAB Algorithms and Applications

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值