多線程算法


 
概述
  
  概念解析:
   串行算法:在任一時刻僅有一條指令被執行。
   並行算法:能夠在多處理器計算機上運行,並且允許多條指令同時執行。
   並行計算機:擁有多個處理單元的計算機。並行計算機體系結構模型有多重:如共享存儲(每個處理器可都可以直接訪問存儲器的任何位置),分布式存儲(每個處理器的存儲器是私有的,處理器之間的訪問,通過發送顯式消息)。——目前正在向共享存儲的並行計算機體系結構模型發展。
   靜態線程
    應用場景:共享存儲並行計算機編程。
    機制:
      1) 提供了一個“虛擬處理器”的軟件抽象(即線程)。這些線程共享一個相同的存儲器。——每個線程維護一個關聯的程序計數器,並能與其他線程相互獨立地執行代碼。
      2) 操作系統加載一個線程到處理器上執行,並且在其他的線程需要運行時再把它交換出來。
 
特別地,探討動態多線程算法的完美模型,它適合算法的設計和分析,並且能再實際應用中有效實現。
 

  動態多線程:是一類重要的並發平台。程序員只需描述應用中的並行性,這種並發平台包含一個調度器,能自動地進行負載平衡計算,大大減輕了程序員的負擔。

    特征:嵌套並行、並行循環。

     

動態多線程模型
   
重點關注:工作量、持續時間和並行度的度量標准,這些將用於分析多線程算法。
 

 case:斐波那契數列

      1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,...

      線性遞推數列

 單位階躍函數如下:

 

代碼1:

1 int FIB(n){
2 
3   if n <= 1
4 
5     return 1;
6   else
7 
8     return FIB(n - 1) + FIB(n - 2);
9 }

 

問題剖析: 

  當n > 1, 比如2的時候, FIB(0) 會被調用兩次。如果是更大的值,必然會出現一個結果重復調用的工作。如下圖:

 

 

時間復雜度為:T(n) = Θ(Ø^n),是以的指數增長,這個過程用來計算斐波那契數列是個相當慢的方法。——得出結論:低效的方法。

 

 代碼2(升級版):采用動態多線程來重寫FIB過程,利用代碼1中FIB(n-1)和FIB(n-2)彼此獨立的特點,可以采用並行計算的方式升級過程。

 

int P-FIB(n)
    if n <= 1
        return n;
    else
        int x = spawn P-FIB(n - 1)
        int y = P-FIB(n - 2)
        sync
        return x + y

 

 關鍵字spawn的作用:嵌套並行調用。父進程派生子進程,與P-FIB(n - 2)並行執行。

 關鍵字sync作用:同步語句。執行完sync之后,一個過程(父進程)才能安全地使用其派生子過程(子進程)的返回值。sync表明,過程在執行sync后面的語句前,必須等到它的所有派生子過程計算完成。

 

分析:

時間復雜度由代碼1的 T(n) = T(n-1) + T(n-2) 升級為T(n) = max(T(n-1), T(n-2)) ;

 

這里我們要理解一個重要的圖分析:有向無環圖

 公式:G=(V,E)

 ——V,代表定點(指令);

 ——Ε ,代表邊(指令間的依賴關系);

  ----如:(μ, ν) ∈  Ε 表示指令 μ必須在 ν之前執行。

 

 

多線程進行矩陣相乘
   
 
 

    

多線程歸並排序
   
    
    
推薦
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM