Lecture 1: Brief Introduction
對ICS的簡單回顧
已經學過的幾種并行模式:
- 多進程:并發(底層的串行,高層的并行)
- 多線程:并行
- 多核:并行
- 向量運算
對并行計算中幾個重要問題的論述
-
計算密集型:
- 比特幣:利用隨機數碰撞產生答案,最后挖礦的效果主要受計算的效果限制。
- 為什么計算密集:對于存儲器訪問少,主要可以存儲于寄存器
- 計算機中最難做的是數據的傳輸,但是比特幣主要利用GPU或者專用ASIC的計算能力
- 不需要數據傳輸的并行是embarrassing parrallel,并沒有什么難度
- 有一類應用不需要傳輸,只需要做出計算單元,就可以快速提升任務完成速度
-
訪存密集:
- 比如GDDR在芯片外面存儲信息,由于傳輸速度的限制,傳輸數據到計算單元的速度低于計算速度
- 表現:訪存帶寬充滿(90%+),運算單元吃不飽(20%+),瓶頸在于數據傳輸
- 過去幾年浮點定點大幅提高,但是傳輸速度只是線性增加
- 訪存密集型任務在真實并行任務中大量存在
-
通訊密集:
瓶頸不再是運算,也不再是數據搬運
以排序算法為例,在單個服務器上是訪存密集型任務,受制于芯片與內存傳輸的帶寬,計算復雜性較低
-
數據量到達一定程度,需要放置在多個服務器中進行工作。
考察下面的例子:比如我們的服務器從1臺到100臺:
計算能力(CPU) *100
訪存帶寬(共同訪存) *100
但是并不是這樣的情況就會讓我們的性能提升100倍,因為這里需要大量服務器之間的交互。
通訊量上升巨大,瓶頸變成了網絡帶寬(GB/S)
-
訪外存密集:
- 某些大數據場景,以地震數據為例,數據量極其巨大,內存根本放不下
- 采用分布式外排序算法,數據都存放在外存中
- 如果硬盤很慢,那么瓶頸在于硬盤帶寬
- 硬盤帶寬提升迅速
- 通訊帶寬都最大可能成為未來并行任務的瓶頸
并行計算解決的一些實際問題
- 宇宙學模擬:在考慮萬有引力的時候如果兩個兩個計算,那么計算的時間復雜度是$O(n^2)$,這在有很多星體的時候明顯不是一個很好的想法
- 找一個截斷半徑,距離長于階段半徑的部分就不再管了
- 對于整個空間(假設為正方體的空間,便于坐標計算)不斷均分為8個部分(想像在正方體的三個方向各切一刀),如此進行下去直到每個小塊里面只有一個星體。
在計算的時候多個星體可以方便地取到重心,對于大范圍內只有一個的星體我們可以直接用大正方體的中心替代其位置
- 湍流現象模擬
- 蛋白質折疊現象模擬
- 利用分子動力學
- 選擇合適的step-gap
- Google服務器:
- 并行處理大量事務
- 游戲中的圖像處理
- 淘寶服務器:
- Map Reduce
一點后話:
- 實際可以應用的算法最高不超過$O(nlogn)$,因為現實生活中面對的往往都是極其大量的數據
- 如果沒有標準的可以達到這個層次的算法,有時就要進行適當的近似(理論模型vs計算模型)
- 利用模型中的稀疏性,具體的應用場景會賦予真實的方程很大的稀疏性,必須要利用起來