發表文章

目前顯示的是有「Matlab」標籤的文章

[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秒左右...