日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并行算法设计与性能优化_CME 323: 分布式算法与优化(1)

發布時間:2024/4/13 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并行算法设计与性能优化_CME 323: 分布式算法与优化(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這門課程是由斯坦福大學在今年 4 月份推出的線上課程,主講人是 Reza Zadeh ,總體來說主講人講解比較幽默,內容也是容易讓人聽得下去,不是那么晦澀難懂。課程內容分為兩個部分:并行計算(parallel computing),分布式計算(distributed computing)。并行計算與分布式計算有啥區別呢?主要的區別在于:并行計算主要是在共享內存情況下的同時計算;而分布式計算則是更多需要考慮網路通信。

并行計算簡介

為什么我們要研究并行計算呢?現在 CPU 性能這么強勁,為啥還要費力研究用多個核一起計算呢?主要原因在于 CPU 的性能優化受到以下限制:CPU 的運算會有上限,3 Gigahertz;并且 CPU 的散熱也是有限的。但是與之相對的是:RAM,硬盤空間卻是處于不斷增長的情況。因為硬件制造商開始從開發更快的處理器,轉為開發多核處理的系統。由于計算從連續計算變為了并行計算,我們也就需要開始研究并行計算算法。

要研究并行算法,我們首先要明確的一個問題就是我們如何來評估并行算法的效率。通常來說,一個算法的效率可以用完成該算法所需要的操作數目(operation)來評估。但是當我們研究并行算法的時候,情況可就大不一樣了。一個高效的并行算法在單個處理器上可能并不高效,反之亦然。所以,為了評估并行算法是否高效,Reza 引入了 work-depth ,并且介紹了算法如何設計來優化該目標。

Parallel RAM 模型

第一個要介紹的并行算法是:Parallel RAM(PRAM)。RAM(Random Access Memory) 模型是典型的連續模型, 在 RAM 中,對于一個特定的內存單元

,有處理器 。處理器 可以在常數時間內,讀取或寫入內存中的任意位置。當我們研究 PRAM,它可能有多種不同的變化了。PRAM 與 RAM 的不同在于,處理器變為多個,內存還是那一塊,那么這會有什么變化呢?我們可能面臨多個處理器同時訪問一塊內存的情況,這可以分為以下幾種情況:

一般來說,這些情況中最常用的是同時讀取,獨占寫入的情況。當然也會有同時寫入的情況。

在處理同時寫入情況時,需要仔細考慮多個處理器同時向同一內存的同一區域寫入有沖突的情況,一般有以下方式來解決同時寫入:

  • Undefined/Garbage: 機器可能會掛掉或者寫入的結果被當成垃圾處理
  • Arbitrary: 沒有事先定義好的確定處理器寫入優先級的規則,每次都隨機選取處理器進行寫入
  • Priority: 事先確定好各處理器寫入的順序
  • Combination: 根據寫入值來確定寫入的順序(比如最大值,負數等優先寫入),與 Priority 方式不同點在于,這個利用了寫入值來確定寫入順序,而前者則是根據處理器來決定順序

通用 Parallel RAM 模型

Parallel RAM 模型主要有以下兩類:

多核共享內存

多核多內存

在實際使用的過程中,處理器與內存之間可能還存在額外的 cache 層。

work 與 depth 的實際意義

work :算法的 work 是指完成算法消耗的時間乘以完成算法消耗的處理器的數目

depth:在并行算法中,我們需要等待計算最緩慢的處理器完成計算,整個計算過程才算真正完成,這個時間就是算法的 depth

對于同樣一個算法,如果該算法在單個處理器上進行處理,其耗時定義為:

;如果在 個處理器上進行處理,其耗時定義為: 。理想情況下,如果總任務被均分為 部分,并且各個部分速度都相同,所以 滿足以下條件:

這也是分布式算法希望達到的下界。

算法的 DAG 表示

我們可以使用一個有向無環圖來表示算法中不同操作之間的依賴關系。可以這樣來將算法構建為 DAG: 當節點

是節點 的輸入時,用一個從 出發到 的邊來表示。最終構成的圖不保證一定是完全連接的,因為有一些計算可能與其它部分完全獨立。

DAG

我們可以把 DAG 看成是一棵樹,它的 root 的 depth 是 0,root 的 children 的 depth 是 1,以此類推。將

定義為樹的第 層所含有的操作的數目,同一層的操作之間沒有依賴關系因此它們可以同時計算。不同層之間的操作不能同時計算。如果要計算當前層的操作,需要等待它所有的 children 操作都計算完成才可以進行。對于連續算法來講,完成算法所需花費的時間就是樹中所有節點的總和,所以我們可以把 work 定義為:

那么當我們擁有無限的處理器的時候,執行算法的耗時是多少呢?耗時就是算法的 depth。定義如下:

Brent's 定理

定義:假設算法的各過程是最優調度的

總結

以上是生活随笔為你收集整理的并行算法设计与性能优化_CME 323: 分布式算法与优化(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。