MATLAB code 加速

MATLAB code 加速

文章目录

  • MATLAB code 加速
    • 利用探查器对脚本语句进行改进
      • 1、查看脚本运行时间
      • 2、step1 预分配内存
      • 3、step2 使用 MATLAB 探查器
      • 4、step3 使用逻辑数组改进判断语句:
    • 使用多核心并行运算
      • 1、 查看脚本运行时间
      • 2、 利用多个核心进行计算
    • 其他方法

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

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

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

1、查看脚本运行时间

使用tictoc命令:

tic; randGrid_start; toc

时间已过 100.763126 秒。

2、step1 预分配内存

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

桔色代表可以进行一些改进,绿色表示代码准备就绪。MATLAB code 加速_第1张图片上图显示: AB 矩阵随迭代次数变化,简单的改进为:为 AB 预分配内存,如代码randGrid_step1.m所示。

tic; randGrid_step1; toc

时间已过 1.180223 秒。

3、step2 使用 MATLAB 探查器

  • 进入探查器:主页 > 运行并计时
    MATLAB code 加速_第2张图片
  • a. 输入脚本名称, b. 点击开始探查,c. 进入函数
  1. 查看代码耗时较多语句:
    MATLAB code 加速_第3张图片
    ​ 显示在随机数分配耗时较多。

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

    randGrid_step2.m进行探查
    MATLAB code 加速_第4张图片

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

MATLAB code 加速_第5张图片
使用MATLAB逻辑索引进行向量化操作,见代码randGrid_step3.m
MATLAB code 加速_第6张图片
使用逻辑数组 idx, 满足条件即赋值。
MATLAB code 加速_第7张图片

使用多核心并行运算

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循环:
MATLAB code 加速_第8张图片
查看运行时间:

tic; randGridEig_step1; toc

时间已过 731.125419 秒。

notes:

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

其他方法

Accelerating MATLAB Algorithms and Applications

你可能感兴趣的:(MATLAB)