[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!
把"for"改成"parfor",重跑程式,就這麼簡單。
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%了。讚!
確實,平行運算可以提升工作效率。
這台筆電從買來到現在,終於發揮它多核心跟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 )
GOOD! ^_^
回覆刪除