1. 程式人生 > >matlab for迴圈過大程式執行慢解決方案

matlab for迴圈過大程式執行慢解決方案

      實驗室經常需要使用到matlab,for迴圈非常慢,自己找了一些matlab中for迴圈的優化方法,for的部分每處理一個大矩陣都要花費大量的時間,這是不可避免需要遇到的問題~。

方法1:迴圈多不要緊,要緊的是迴圈巢狀得太多,要解決這個問題,需要從根本上找原因,用更好的資料結構和演算法,從根源上減少對於迴圈的需求

方法2:將迴圈次數多的放在裡面,迴圈次數少的放在外面做大迴圈

方法3:for迴圈中少用if——else if判斷,用switch——case,效率更高

方法4:多執行緒併發替代單迴圈麼,儘可能利用CPU

for(int i = 0; i < 100; ++i)
{
    a[i] = xxx;
}
優化:
for(int i = 0; i < 25; i += 4)
{
    a[i] = xxx;
    a[i + 1] = xxx;
    a[i + 2] = xxx;
    a[i + 3] = xxx; 
}
減少迴圈次數,而且還能意外增加指令級的並行運算機率,其次,用多執行緒,最簡單的就是openmp。要是對資料的處理,就用SSE指令什麼的。
這樣下來。整個程式不不止快那麼一點點

方法5:結合具體的迴圈,利用時間和空間的相互轉換,也就是用空間換時間

方法6:vectorization(向量化)處理後,效率也有很大提高

方法7:最基本的方面,別在視窗中顯示矩陣,每條語句的結尾加分號

方法8:找一臺效能好的電腦,用伺服器跑那就更好了!

      在高效能運算領域,優化這種涉及到一些演算法的東西不可能隨隨便便地告訴別人,尤其是雙線性插值優化,在65nm的Core2 Duo上優化度超過300%(別人說的,我也不會~)。所以優化不能一拍腦袋就做,需要結合具體的實際情況,找到優化的方法。