63
平平平平平平 HungYen Chen chy168 / ZeroZone [email protected]

平行運算介紹

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 平行運算介紹

平行計算介紹

HungYen Chenchy168 / ZeroZone

[email protected]

Page 2: 平行運算介紹

大綱

不同計算單元簡介 訊息傳送 總結

Page 3: 平行運算介紹

什麼是平行

• 人類慾望無止盡• 文字→影像→聲音→動畫→多媒體→網路

→ ??• 實驗之模擬

• 氣象預報• 汽車碰撞

• 複雜理論證明和使用• 製藥學• 化學• 生化 / 生物科技

05/13/09 HPC Lab., CSIE@Tunghai University

Page 4: 平行運算介紹

電腦也有極限 ?

• 人腦 : 103 次運算 / 秒• 人腦慢但比電腦聰明 , 例如 : 人臉辨識

• 電腦 : 109 次運算 / 秒 ( 十億次 )• 受限於傳送速度 ( 光速 ) 的限制 3x108 公尺 /

秒銅線的傳輸速度 9x107 公尺 / 秒

• 飛彈的導引系統需要 1011 ~1012 次運算 / 秒

05/13/09 HPC Lab., CSIE@Tunghai University

這些 ..如果沒有平行計算是達不到的

Page 5: 平行運算介紹

如何再加快速度

• 增快電子元件切換速度• 受限於傳輸速度、散熱、分子結構

• 改進計算機結構 ( 硬體 )• Cache memory• Channels / bus • Multiple/Pipeline function unit• Data pipeline

• 多顆 CPU

05/13/09 HPC Lab., CSIE@Tunghai University

Page 6: 平行運算介紹

舉例說明

以工廠為例 , 如果一件產品依序需要 A,B,C三個步驟才能完成 , 每個步驟都花一個單位時間 , 以下舉例四種方法

1. Sequential2. Pipeline3. Data Parallelism4. Pipeline + Data Parallelism

Page 7: 平行運算介紹

Sequential

一個人做 A,B,C 三種工作

• 1 個產品 ( 紅色方塊 ) 需要 3 個單位時間,k 個產品需要 3k 單位時間

A B C

Page 8: 平行運算介紹

Pipeline

用三個人 , 每個人只做一個步驟 (A or B or C)

• 產生 1 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 3 / 3 = 1 倍• 產生 2 個產品 ( 紅色方塊 ) 需要 4 個單位時間 , 加速 6 / 4 = 1.5 倍• 產生 3 個產品 ( 紅色方塊 ) 需要 5 個單位時間 , 加速 9 / 5 = 1.8 倍• 產生 4 個產品 ( 紅色方塊 ) 需要 6 個單位時間 , 加速 12 / 6 = 2 倍• 產生 5 個產品 ( 紅色方塊 ) 需要 7 個單位時間 , 加速 15 / 7 = 2.14 倍• 產生 6 個產品 ( 紅色方塊 ) 需要 8 個單位時間 , 加速 18 / 8 = 2.25 倍

‧‧‧

• 產生 k 個產品 ( 紅色方塊 ) 需要 k+2 個單位時間 , 加速 3k / (k+2) 約 3 倍

A B C

Page 9: 平行運算介紹

Data Parallelism

用三個人 , 每人都做 A,B,C 三個步驟

• 產生 1 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 3/3 = 1 倍• 產生 2 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 6/3 = 2 倍• 產生 3 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 9/3 = 3 倍• 產生 4 個產品 ( 紅色方塊 ) 需要 6 個單位時間 , 加速 12/6 = 2 倍• 產生 5 個產品 ( 紅色方塊 ) 需要 6 個單位時間 , 加速 15/6 = 2.5

倍• 產生 6 個產品 ( 紅色方塊 ) 需要 6 個單位時間 , 加速 18/6 = 3 倍• ……• 產生 k 個產品 ( 紅色方塊 ) 需要 ((k+2)div3)*3 單位時間 , 加速

3k/ ((k+2)div3)*3 約 3 倍

A B C

A B C

A B C

Page 10: 平行運算介紹

Pipeline + Data Parallelism

找 9 個人 , 每個人只做一個步驟 (A or B or C)

• 產生 1 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 3 / 3 = 1 倍• 產生 2 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 6 / 3 = 2 倍• 產生 3 個產品 ( 紅色方塊 ) 需要 3 個單位時間 , 加速 9 / 3 = 3 倍• 產生 4 個產品 ( 紅色方塊 ) 需要 4 個單位時間 , 加速 12 / 4 = 3 倍• 產生 5 個產品 ( 紅色方塊 ) 需要 4 個單位時間 , 加速 15 / 4 = 3.75 倍• 產生 6 個產品 ( 紅色方塊 ) 需要 4 個單位時間 , 加速 18 / 4 = 4.5 倍• …• 產生 k 個產品 ( 紅色方塊 ) 需要 ((k+2)div3)+2 個單位時間 , 加速 3k /

((k+2)div3)+2 約 9 倍

A B C

A B C

A B C

Page 11: 平行運算介紹

多處理器 (Multi-Processor/CPU)

• 個人電腦 PC 的架構• 使用多 CPU 來解決問題

• 平行電腦架構讓• 多個處理器 (CPU)

同時執行

• 平行計算• 不同的 CPU 透過工作分配及工作溝通完成任務

• 分散式計算• 主 CPU(Master) 分配工作給其它 CPU, 每個

CPU 工作完畢後只跟 Master 回報或不回報

Page 12: 平行運算介紹

平行計算應用 : 天氣預報

要做到天氣預報 , 必須計算 3000哩 x 3000哩 x 11 哩的空間 (1 哩約 1.6 公里 )

把這樣的空間分割成 0.1哩 x0.1哩 x0.1哩的小方塊 , 則會有 1011 個方塊

Page 13: 平行運算介紹

平行計算應用 : 天氣預報

• 半小時收集一次天氣資料,兩天就會有2x24x2 = 96 筆資料

• 每一個小方塊的一筆資料需要 100 個計算步驟,要預測兩天後天氣就會有 1015

的計算• 如果用超級電腦, 109 運算 / 秒,需要

11.5天 (1天 86400秒 )• 如果用 1000 個可以做 108 運算 / 秒的

CPU 同時運算就只要 2.78 個小時

Page 14: 平行運算介紹

平行計算應用 : 汽車碰撞

• 一般車種 , 需實車碰撞 25次 ; 高級車種則需要上百次 , 每一台還沒量產的車需要手工打造 , 成本約 10~20 萬美金 / 輛

• 將車體模型分割成 5 萬~10 萬個座標點 , 時間以百萬分之一秒為單位碰撞一秒得到三個方向軸的力量數據5 萬 x 百萬 x3 = 1.5 x 1011 次運算

• 座標點分得更細或碰撞時間增加則計算就相對增加

• 電腦不能取代實車碰撞 , 但是能做到碰撞前的預測及碰撞後的分析

Page 15: 平行運算介紹

平行計算應用 : 深藍電腦電腦人工智慧對奕西洋棋

1985

每秒可運算 5 萬個棋步三分鐘可想百萬步

深藍計劃源自許峰雄博士在美國卡内基·梅隆大學修讀博士學位時的研究

1987

50 萬步 / 秒

1988

72 萬步 / 秒 取名”深思” (Deep Thought)

1989

200 萬步 / 秒

1991

600萬~ 700 萬步 / 秒

1996

1 億步 / 秒 用 256顆 VLSI晶片 , 取名”深藍” , 與棋王”卡斯帕洛夫”對奕 , 1勝 2 和 3 敗

1997

2 億步 / 秒 , 三分鐘可想 360 億步棋王每秒可想 3 步 , 三分鐘可想540 步

用 IBM RS/6000SP 超級電腦 , 配 32顆 IBM Power2 Super Chip(內含 8 個 Power2晶片 ), 再配 512顆 VLSI晶片 ,與棋王戰到 2 勝 3 和 1敗 (棋王只勝第一場 )

Page 16: 平行運算介紹

平行運算的架構

Cluster

Page 17: 平行運算介紹

05/13/09 HPC Lab., CSIE@Tunghai University

是粽子

Page 18: 平行運算介紹

Cluster

• 強調區域內的運算資源整合• 區域中的電腦異質性低• 區域中的電腦與電腦的連結透過 LAN

• LAN, Local Area Network

05/13/09 HPC Lab., CSIE@Tunghai University

Page 19: 平行運算介紹

平行運算的架構

Grid

Page 20: 平行運算介紹

05/13/09 HPC Lab., CSIE@Tunghai University

Page 21: 平行運算介紹

Grid

• 強調電腦、網路的異質性高• 強調資源的共用性

• 任何人皆可以要求使用其他節點的資源• 可將工作轉移到遠端的可計算資源

05/13/09 HPC Lab., CSIE@Tunghai University

Page 22: 平行運算介紹
Page 23: 平行運算介紹

平行運算的架構

Grid 平台 - boinc

Page 24: 平行運算介紹

簡介

• 一種 volunteer computing和 desktop Grid computing的平台

• 利用「自願者」的計算資源• 不同專案之間彼此獨立• 多平台的支援• web-base的使用者介面

Page 25: 平行運算介紹

特色

• 靈活的配合不同程式語言• Java• Python• C• Fortran

• 應用程式佈署快速• 負載平衡與容錯• 公開的需求 (運算 )

Page 26: 平行運算介紹

特色 (cont.)

• 低的「資料 /計算」比率• 支援大量的資料• OpenSource• 可自行組織團隊

• 國家、團隊、個人• 安全性

• 每個使用者擁有不同的 Key

Page 27: 平行運算介紹
Page 28: 平行運算介紹

Credit

Page 29: 平行運算介紹

運作流程

Page 30: 平行運算介紹

Client

Page 31: 平行運算介紹

Client與 ScreenSaver

Boinc支援圖形化展示螢幕保護模式

Page 32: 平行運算介紹
Page 33: 平行運算介紹

其他專案的整合

• Condor's backfill mechanism• Lattice project

• University of Maryland

Page 34: 平行運算介紹

平行運算的架構

Cloud Computing

Page 35: 平行運算介紹

Cloud Computing

雲端運算不是技術,它是概念。前面提到運算的概念,歸納常見的有

Pervasive computing Ubiquitous computing Parallel computing Grid computing

cloud computing

distributed computing

Page 36: 平行運算介紹

Grid VS. Cloud Computing

Grid computing異質系統之間運算資源的整合透過通訊標準來互相溝通分享彼此的運算資源

整合組織內部的資源,方便利用

Page 37: 平行運算介紹

當網路開始更加盛行 ...

頻寬、通訊標準、運算能力、架構逐漸成熟

Web Service更多樣化

Page 38: 平行運算介紹

Grid VS. Cloud Computing(cont.) Cloud computing

Google、 Yahoo!、 Amazon的需求使用者可以在不同的地方透過網路使用各個企業開放出來的服務

使用者、開發者的資源從本地端移動至網路中。

網路圖形 => 雲狀

Page 39: 平行運算介紹

資料

運算

Page 40: 平行運算介紹

雲端資料和運算有如在風中 …

05/13/09 HPC Lab., CSIE@Tunghai University

Page 41: 平行運算介紹

是 新世界的震撼彈

Page 42: 平行運算介紹

雲端運算 – 小結 & 比較 Cloud computing不代表技術突破或革新,只是代表分散式運算本身的一種成熟。

我們無法將 Grid和 Cloud computing做嚴格區分,只能說 cloud computing將分散式運算提升為服次層級。

Page 43: 平行運算介紹

雲端運算平台 - hadoop

Open Source的分散式計算平台 HDFS

Hadoop Distributed File System Google GFS(Google File System)的實作

MapReduce MapReduce 是一種程式語言開發模式 Map

將資料處理為<Key,Value> Reduce

組合、收集結果

Page 44: 平行運算介紹

想試試看嗎?上網搜尋 ...

hadoopvm

Page 45: 平行運算介紹

遊戲晶片也可以平行運算

GPU Cluster

Page 46: 平行運算介紹

112/04/08 46

Why Massively Parallel Processor

Page 47: 平行運算介紹

112/04/08 47

GPGPU 的優點

與 CPU 相比 :

1.顯示晶片通常具有更大的記憶體頻寬。2.顯示晶片具有更大量的執行單元。 3.和高階 CPU 相比,顯示卡的價格較為低廉。

Page 48: 平行運算介紹

112/04/08 48

GPGPU 的缺點1. 顯示晶片的運算單元數量很多,因此對於不能高度平行化

的工作,所能帶來的幫助就不大。

2. 目前許多顯示晶片並沒有分開的整數運算單元,因此整數運算的效率較差。

3. 顯示晶片通常不具有分支預測等複雜的流程控制單元,因此對於具有高度分支的程式,效率會比較差。

4.目前 GPGPU 的程式模型仍不成熟,也還沒有公認的標準。

GPGPU : 利用顯示晶片來幫助進行一些計算工作的方法

Page 49: 平行運算介紹

112/04/08 49

Parallel Computing on a GPU

8-series GPUs deliver 25 to 200+ GFLOPSon compiled parallel C applicationsAvailable in laptops, desktops, and clusters

GPU parallelism is doubling every year

Programmable in C with CUDA tools

Multithreaded model uses application data parallelism and thread parallelism

GeForce 8800

Tesla S870

Tesla D870

Page 50: 平行運算介紹

112/04/08 50

16 highly threaded SM’s, >128 FPU’s, 367 GFLOPS, 768 MB DRAM, 86.4 GB/S Mem BW, 4GB/S BW to CPU

Load/store

Global Memory

Thread Execution Manager

Input Assembler

Host

Texture Texture Texture Texture Texture Texture Texture Texture結 構

Parallel DataCache

Parallel DataCache

Parallel DataCache

Parallel DataCache

Parallel DataCache

Parallel DataCache

Parallel DataCache

Parallel DataCache

Load/store Load/store Load/store Load/store Load/store

GeForce 8800

Page 51: 平行運算介紹

112/04/08 51

Arrays of Parallel Threads

• CUDA kernel 是以 Thread 的陣列執行– 每個 Thread 皆執行同樣的程式碼– 每個 Thread 都有一個 ID ,用來計算使用的記憶體位

置和控制

76543210

…float x = input[threadID];float y = func(x);output[threadID] = y;…

threadID

Page 52: 平行運算介紹

112/04/08 52

…float x = input[threadID];float y = func(x);output[threadID] = y;…

threadID

Thread Block 0

……float x = input[threadID];float y = func(x);output[threadID] = y;…

Thread Block 0

…float x = input[threadID];float y = func(x);output[threadID] = y;…

Thread Block N - 1

Thread Blocks: Scalable CooperationDivide monolithic thread array into

multiple blocksThreads within a block cooperate via shared

memory, atomic operations and barrier synchronization

Threads in different blocks cannot cooperate

76543210 76543210 76543210

Page 53: 平行運算介紹

112/04/08 53

CUDA Device Memory Allocation (cont.)

Code example: Allocate a 64 * 64 single precision float

arrayAttach the allocated storage to Md“d” is often used to indicate a device data

structureTILE_WIDTH = 64;Float* Mdint size = TILE_WIDTH * TILE_WIDTH * sizeof(float);

cudaMalloc((void**)&Md, size);cudaFree(Md);

Page 54: 平行運算介紹

112/04/08 54

CUDA Host-Device Data Transfer

cudaMemcpy()memory data transferRequires four parameters

Pointer to destination Pointer to sourceNumber of bytes copiedType of transfer

Host to Host (ex:CPU端的行為 )Host to Device (ex:編譯好要運算的程式送至顯示卡 )

Device to Host (ex: 算好傳回 )Device to Device (ex: 運算單元

間的資料通信 )

Grid

GlobalMemory

Block (0, 0)

Shared Memory

Thread (0, 0)

Registers

Thread (1, 0)

Registers

Block (1, 0)

Shared Memory

Thread (0, 0)

Registers

Thread (1, 0)

Registers

Host

Page 55: 平行運算介紹

MPI, MESSGE PASSING INTERFACE

用網路串連起我們

05/13/09 HPC Lab., CSIE@Tunghai University

Page 56: 平行運算介紹

MPI 概述

• The message-passing model• Types of Parallel Computing Models• 行程間通訊• 什麼是MPI(message-passing interface)• 為什麼要使用 MPI• Basics of MPI message passing

• Hello, World!• Fundamental concepts• Simple examples

• Parareal 演算法簡介

Page 57: 平行運算介紹

The message-passing model

• 行程 (Process):• 一般來說,一個行程指的是程式(Program)和它使用的記憶體位址。

• 行程間可能會共享單一個位址空間。• MPI 是用來作行程間的溝通,在這裡,每個行程使用分開的位址空間。

• 行程間通訊 (Interprocess communication)包含 • 同步化 (Synchronization)• 將某個行程的位址空間作資料轉移至其他的行程的位址空間。

Page 58: 平行運算介紹

Types of Parallel Computing Models

• 資料平行 (Data Parallel) – 單一指令同時運行在多筆資料上。 Single Instruction, Multiple Data (SIMD)• 用一個控制器來控制多個處理器,同時對一組數據(又稱「數據向量

」)中的每一個分別執行相同的操作來實現空間上的平行性。• 任務平行 (Task Parallel) – 不同指令作用在不同資料上

Multiple Instruction, Multiple Data (MIMD)• SPMD (single program, multiple data):所有的處理器

運作相同的程式,但每一個都有自已要處理的資料。需要注意的是,這種方式,在各處理器之間,它們的運作層級是不同步的。

• SPMD is equivalent to MIMD since each MIMD program can be made SPMD (similarly for SIMD, but not in practical sense.)

• Message passing (and MPI) is for MIMD/SPMD parallelism.

Page 59: 平行運算介紹

行程間通訊

使用 message-passing 達到資料交換。資料由某一行程發送,並由另一行程接收。

Process 0 Process 1

Send(data)

Receive(data)

Page 60: 平行運算介紹

什麼是 MPI(message-passing interface)

• 訊息傳遞函式庫規格(message-passing library specification)• 一種廣泛的訊息傳遞模型• 並非程式語言或編譯器規格• 也不是實作或產品。

• 給平行電腦、叢集 (clusters) 使用• 提供平行電腦硬體的使用給

• end users• library writers• tool developers

Page 61: 平行運算介紹

為什麼要使用 MPI

• 它提供了 powerful, efficient, and portable way to express parallel programs

• 完善的模組化設計

以上二點使得學習撰寫平行程式的門檻降低

Page 62: 平行運算介紹

Hello, World!

首先,先討論二個基本的重要問題在一個平行計算中,行程間要怎麼知道有幾個行程在運作?( How many?)我是哪一個?(Which one am I?)

MPI 提供二個函式來回答以上二個問題MPI_Comm_size

回報行程的數目MPI_Comm_rank

回報我是第幾個行程 ( 行程 ID)

Page 63: 平行運算介紹

謝謝