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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章