[Matlab] Matlab parallel computing 平行運算好用,但仍要注意效率

Matlab大魔王,相當消耗電腦資源。

只是做個700萬筆資料的Time shift loop,瞬間就吃掉25 GB的RAM。

而且程式等了一小時都還沒好。

需要尋找解決方案。

狀況與問題

只是要處理一下timetable的timeshift問題

處理timetable的timeshift問題的主要程式碼。

當程式開始執行後,打開Windows的工作管理員來看GPU跟CPU使用率,但數值跳太快了。
所以,看截圖的變化就好。

RAM吃到100%。足足32 GB的RAM被吃光光。

RAM使用了100%,CPU使用率到還好,不到10%。

PS: 還沒有Fortran恐怖!
以前算Eigenvalue and Eigenvector problems時,直接把32 GB的RAM吃完,然後報錯,出error code, 超出記憶體memory exceeded!

解決方案 (Case 1)

使用平行運算parallel computing,
把"for"改成"parfor",重跑程式,就這麼簡單。

如圖所示,使用12個workers,迴圈數為7378891,整個迴圈跑下來共使用時間1477.311617秒。

RAM還是吃到100%,但這次連CPU也吃到100%了。讚!

CPU吃到100%

可看到12個"MATLAB R2022b"正在執行中。

還好有使用平行運算,把時間壓縮到25分鐘左右。不然照比例算回去的話,可能需要300分鐘才跑得完。也就是要等5小時了。(我是不考慮再跑個單核來當對照組了,太累了)

確實,平行運算可以提升工作效率。

這台筆電從買來到現在,終於發揮它多核心跟32GB RAM的功能了。GOOD! ^_^

當然,未來如果經費夠,應該考慮使用桌機或工作站來處理這類事情。否則,程式一跑下去,就要去"泡咖啡"喝下午茶了! ^_^

PS: 平行運算的手段還有很多,這裡只是使用相對簡單的方式去處理問題。針對不同的問題,也有不同的平行運算方式。有興趣的人,可自行深入研究。

平行運算不是萬能 (Case 2)

雖然在上述的工作中,平行運算發揮他的長項,幫我們節省了大量的時間。

但平行運算是不是萬能?

不見得!

例如,下面這段程式,若使用平行運算,花費92秒左右,若沒使用平行運算,則花費72秒左右。使用平行運算反而慢了約20秒。

使用平行運算,花費時間92.653087秒。

未使用平行運算,花費時間92.671920秒。

使用平行運算,將工作分給12個worker去做,反而比較慢

這跟現實生活很貼近。

例如: 小工作如果要分給很多員工去做,可能做得更慢。因為主管分配工作也需要時間。倒不如由指派一位員工搞定來得快。


(FB link: https://www.facebook.com/hsienching.chung/posts/pfbid02WTwuVveFUd2vDku7CNjhvDCSYVmAtG5CGcFNooS4tD7b9WTrzzFbvRiD9h6rBNQhl )


相關Po文

[微開箱][升級] 華碩 ASUS VivoBook Pro 16X OLED N7601ZW-0038K12700H零度黑

[Asus] Vivobook Pro 16X n7601 簡易拆機 (simple teardown)



留言

張貼留言

這個網誌中的熱門文章

什麼是電池的CCA(Cold Cranking Amperes)? 如何量測CCA?

[數據處理] Excel 日期時間 換算成 秒

[Arduino] 使用示波器來看Arduino的UART, Inverted Software serial及RS-232訊號並對其進行解碼