bài giới thiệu : tổng quan về lập trình song song

51
Bài giới thiệu: Bài giới thiệu: Tổng quan về lập trình Tổng quan về lập trình song song song song

Upload: pahana

Post on 24-Jan-2016

211 views

Category:

Documents


4 download

DESCRIPTION

Bài giới thiệu : Tổng quan về lập trình song song. Nội dung. Xử lý song song Xu hướng phát triển của CPU Các mô hình lập trình song song Truyền thống Dựa trên dữ liệu. Xử lý song song. Vai trò của xử lý song song trong cuộc sống. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bài giới thiệu : Tổng quan về lập trình  song  song

Bài giới thiệu:Bài giới thiệu:

Tổng quan về lập trình song Tổng quan về lập trình song songsong

Page 2: Bài giới thiệu : Tổng quan về lập trình  song  song

Nội dungNội dungXử lý song songXu hướng phát triển của CPUCác mô hình lập trình song song

◦Truyền thống◦Dựa trên dữ liệu

04/21/23 2

Page 3: Bài giới thiệu : Tổng quan về lập trình  song  song

Xử LÝ SONG SONGXử LÝ SONG SONG

04/21/23 3

Page 4: Bài giới thiệu : Tổng quan về lập trình  song  song

Vai trò của xử lý song song Vai trò của xử lý song song trong cuộc sốngtrong cuộc sốngXử lý song song hoàn toàn không

xa lạ trong cuộc sống◦Quầy tính tiền ở siêu thị◦Mua vé vô công viên◦Đường cao tốc nhiều làn xe

Nhiều sự việc phức tạp trong cuộc sống đều xảy ra đồng thời

04/21/23 4

Page 5: Bài giới thiệu : Tổng quan về lập trình  song  song

Quầy tính tiền ở siêu thịQuầy tính tiền ở siêu thị

04/21/23 5Source: Checkoutshttp://www.sturm.si/en/images/iman/gal_img.0077.jpg

Source: http://www.baobinhthuan.com.vn/web/data/news/2009/1/21476/thitruong.jpg

Page 6: Bài giới thiệu : Tổng quan về lập trình  song  song

Mua vé vô công viênMua vé vô công viên

04/21/23 6

Source: The Old Entrancehttp://www.matterhorn1959.com/blog1/4.TicketBooths.jpg

Source:http://www.vtc.vn/newsimage/original/vtc_216925_suoitien.jpg

Page 7: Bài giới thiệu : Tổng quan về lập trình  song  song

Đường cao tốc nhiều làn Đường cao tốc nhiều làn xexe

04/21/23 7

Source: Stock Photo: Cars In Traffic On Multi-lane Highwayhttp://www.worldofstock.com/closeups/TRC4948.php

Page 8: Bài giới thiệu : Tổng quan về lập trình  song  song

Vai trò của xử lý song song Vai trò của xử lý song song trong cuộc sốngtrong cuộc sốngTại sao lại phải xử lý song song?

◦Tiết kiệm thời gian + tiền bạc

◦Chia nhỏ ra để xử lý nhanh hơn

xử lý song song giúp nâng cao năng suất

04/21/23 8

Page 9: Bài giới thiệu : Tổng quan về lập trình  song  song

Ứng dụng xử lý song songỨng dụng xử lý song songNhững bài toán phức tạp ở nhiều lĩnh

vực thực tế đòi hỏi cao về tốc độĐưa ra quyết định nhanh dựa trên lượng

lớn dữ liệu như:◦Dự báo thời tiết (dự báo bão, lũ, …)◦Chuẩn đoán y khoa◦Kinh tế - tài chính (mua bán chứng khoán)◦Quân sự ◦…

Xây dựng mô hình để tính toán và phân tích trên máy tính

04/21/23 9

Page 10: Bài giới thiệu : Tổng quan về lập trình  song  song

Ứng dụng xử lý song songỨng dụng xử lý song songMô phỏng thực tế xem xét đến nhiều yếu tố

(tham số) khác nhau nhiều khả năng/thể hiện của một bài toán

có thể được xử lý song song

04/21/23 10

Page 11: Bài giới thiệu : Tổng quan về lập trình  song  song

XU HƯớNG PHÁT XU HƯớNG PHÁT TRIểN CủA CPUTRIểN CủA CPU

04/21/23 11

Page 12: Bài giới thiệu : Tổng quan về lập trình  song  song

Sự phát triển của CPUSự phát triển của CPUCentral Processing Unit (CPU)60 năm phát triển của CPU Intel

04/21/23 12

60 YEARS OF THE TRANSISTOR: 1947 – 2007http://www.intel.com/technology/timeline.pdf

Page 13: Bài giới thiệu : Tổng quan về lập trình  song  song

Sự phát triển của CPUSự phát triển của CPU

04/21/23 1360 YEARS OF THE TRANSISTOR: 1947 – 2007http://www.intel.com/technology/timeline.pdf

Page 14: Bài giới thiệu : Tổng quan về lập trình  song  song

Sự phát triển của CPUSự phát triển của CPU

04/21/23 1460 YEARS OF THE TRANSISTOR: 1947 – 2007http://www.intel.com/technology/timeline.pdf

Page 15: Bài giới thiệu : Tổng quan về lập trình  song  song

Sự phát triển của CPUSự phát triển của CPUCPU nhiều lõi ngày càng phổ dụngTại sao lại phải chuyển từ đơn lõi

sang nhiều lõi?Từ 1975 hiệu năng CPU vẫn tăng

liên tục (100x/10 năm) Những rào cản khi tăng tốc CPU

đơn lõi ◦Power Wall ◦Memory Wall ◦Complexity Wall

04/21/23 15

Page 16: Bài giới thiệu : Tổng quan về lập trình  song  song

Power Wall Power Wall

04/21/23 16

Page 17: Bài giới thiệu : Tổng quan về lập trình  song  song

Power Wall Công suất (W) của CPU tỉ lệ với

NCV2f ◦N: số lượng transistor◦C: điện dung◦V: số vol ◦f: tần số

Xu hướng ↑N ↓C ↓V(Công nghệ transistor mới) Sẽ như thế nào nếu ↑f

04/21/23 17

Page 18: Bài giới thiệu : Tổng quan về lập trình  song  song

Power Wall Power Wall Mỗi thế hệ mạch in mới (90, 60, 45, 32, 22, 16,

11 nm) Số lượng transistor/die tăng gấp đôi (↑N) Kích thước transistors thu nhỏ hơn (↓C) Sử dụng số vol thấp hơn (↓V).

04/21/23 18http://www.digital-daily.com/cpu/intel_penryn/

Page 19: Bài giới thiệu : Tổng quan về lập trình  song  song

Power WallPower WallĐiện năng cung cấp đã giảm từ 15V

xuống còn 1V trong vòng gần 30 nămNgưỡng tối thiểu là 0.7V còn giảm thêm được (1.0/0.7)2=2XNhưng khi tăng mật độ (↑N) và xung

nhịp (↑f) của CPU lên thì mức tiêu hao năng lượng tăng từ 1 W lên 100 W chỉ trên 1 cm2

khó tản nhiệtĐã đạt tới giới hạn xung nhịp CPU

không giúp tăng tốc hệ thống như trước nữa (kể từ P4)

04/21/23 19

Page 20: Bài giới thiệu : Tổng quan về lập trình  song  song

Memory WallMemory Wall

04/21/23 20

Page 21: Bài giới thiệu : Tổng quan về lập trình  song  song

Memory Wall Độ trễ của DRAM cải thiện không đáng

kể dùng cache của CPU CPU cache tốn kém do miss (có thể

mất 300 xung đồng hồ)Để giảm miss ½ tăng gấp 4 lần

dung lượng cache (kích thước thực sự tăng!)Nhiều transitor trong CPU được dùng cho

việc xử lý truy xuất bộ nhớ nàyCách dễ dàng hơn để tăng băng thông

bộ nhớ Truy xuất bộ nhớ song songNhìn chung hiệu năng được nâng cao

04/21/23 21

Page 22: Bài giới thiệu : Tổng quan về lập trình  song  song

Memory WallMemory Wall Tỉ lệ miss khi tăng dung lượng

cache

04/21/23 22

http://en.wikipedia.org/wiki/File:Cache,missrate.svg

Page 23: Bài giới thiệu : Tổng quan về lập trình  song  song

Xu hướng phát triển CPUXu hướng phát triển CPUDo những rào cản trên nên CPU đơn

lõi◦Hiệu năng sẽ tăng rất chậm (5 – 10%)◦Tốt cho phần mềm truyền thống (chạy

tuần tựGiải pháp của nhà sản xuất phần

cứng để tăng tốc CPU 100x là tăng số lõi/nhân thay vì tăng f.

mở ra một kỉ nguyên song song mới

04/21/23 23

Page 24: Bài giới thiệu : Tổng quan về lập trình  song  song

Máy tính và hiệu năng phần Máy tính và hiệu năng phần mềmmềmTrước đây chỉ cần nâng cấp phần cứng

chương trình chạy nhanh hơn

04/21/23 24

Tần số CPU bị giảm xuống do giới hạn vật lí

Hai xu hướng khác nhau

Source [3]

Page 25: Bài giới thiệu : Tổng quan về lập trình  song  song

Máy tính và hiệu năng phần Máy tính và hiệu năng phần mềmmềm

04/21/23 25

Source [3]

Page 26: Bài giới thiệu : Tổng quan về lập trình  song  song

LậP TRÌNH SONG LậP TRÌNH SONG SONGSONG

04/21/23 26

Page 27: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song truyền Lập trình song song truyền thốngthống

04/21/23 27

Song song

Tuần tự

Source [2]

Page 28: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song truyền Lập trình song song truyền thốngthống Tuần tự Song song

Ý tưởng đơn giản nhưng mang lại hiệu quả cao

04/21/23 28

void quicksort(int * a, int n) { if (n <= 1) return; int s = partition(a,n);

quicksort(a,s); quicksort(a+s,n-s);}

void quicksort(int * a, int n) { if (n <= 1) return; int s = partition(a,n); parallel_invoke( [&]{quicksort(a,s);}, [&]{quicksort(a+s,n-s);});}

Page 29: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song truyền Lập trình song song truyền thốngthốngLập trình song song không đơn

giản3 khó khăn chủ đạo

◦Cách suy nghĩ tuần tự◦Chuyển đổi từ tuần tự sang song

song◦Khả năng mở rộng theo phần cứng

Còn nhiều vấn đề khác như debug, kiểm thử, hiệu năng …

04/21/23 29

Page 30: Bài giới thiệu : Tổng quan về lập trình  song  song

Cách suy nghĩ tuần tựCách suy nghĩ tuần tựKiến trúc Von Neumann

kết quả có tính tất định (chắc chắn)Không còn phù hợp khi chuyển sang

song song trạng thái không xác định

04/21/23 30

Source [2]

Page 31: Bài giới thiệu : Tổng quan về lập trình  song  song

Cách suy nghĩ tuần tựCách suy nghĩ tuần tự

Tuần tự Song song

Thời điểm 1 & 2 biết chắc tình trạng của mảng a

Thời điểm 3 không biết chắc tình trạng của mảng a

04/21/23 31

void quicksort(int * a, int n) { if (n <= 1) return; int s = partition(a,n);

quicksort(a,s); quicksort(a+s,n-s);}

void quicksort(int * a, int n) { if (n <= 1) return; int s = partition(a,n); parallel_invoke( [&]{quicksort(a,s);}, [&]{quicksort(a+s,n-s);});}

1

2

3

Page 32: Bài giới thiệu : Tổng quan về lập trình  song  song

Chuyển đổi tuần tự sang Chuyển đổi tuần tự sang song songsong song

Mô hình mối quan hệ giữa tuần tự và song song bằng một đồ thị có hướng

Đỉnh – lệnhCạnh nối x y lệnh x thực thi trước

lệnh y (tuần tự)Không có cạnh nối x

và y x || y (song song)

04/21/23 32

Source [4]

Tuần tự

Song song

Page 33: Bài giới thiệu : Tổng quan về lập trình  song  song

Chuyển đổi tuần tự sang Chuyển đổi tuần tự sang song songsong songHàm tính Fibonacci đệ qui

04/21/23 33

int fib(int n) { 1 if (n < 2) 2 return n; else { 3 int x = fib(n-1); 4 int y = fib(n-2); 5 return x + y; } }

song song

Page 34: Bài giới thiệu : Tổng quan về lập trình  song  song

Chuyển đổi tuần tự sang Chuyển đổi tuần tự sang song songsong songĐịnh luật Amdahl

04/21/23 34

1

1speedup

p

Tỉ lệ code chạy song song càng nhiều tốc độ tăng lên càng nhiều lần

Source [2]

Page 35: Bài giới thiệu : Tổng quan về lập trình  song  song

Chuyển đổi tuần tự sang Chuyển đổi tuần tự sang song songsong songKhi tăng số CPU lên

04/21/23 35

1speedup

ps

N

Tăng số CPU cũng giúp tăng tốc độ với cùng tỉ lệ code chạy song song

Source [2]

Page 36: Bài giới thiệu : Tổng quan về lập trình  song  song

Khả năng mở rộng theo phần Khả năng mở rộng theo phần cứngcứng◦ Liệu khi phần cứng thay đổi (số CPU thay đổi) thì code có phải thay đổi không?

phải thay đổi code vấn đề lớn ???04/21/23 36

Page 37: Bài giới thiệu : Tổng quan về lập trình  song  song

Khả năng mở rộng theo phần Khả năng mở rộng theo phần cứngcứng

04/21/23 37

int main(int argc, char *argv[]) { pthread_t thread; thread_args args; int status; int result; int thread_result; if (argc < 2) return 1; int n = atoi(argv[1]); if (n < 30) result = fib(n); else { args.input = n-1; status = pthread_create(&thread, NULL, thread_func, (void*) &args ); // main can continue executing while the thread executes. result = fib(n-2); // Wait for the thread to terminate. pthread_join(thread, NULL); result += args.output; } printf("Fibonacci of %d is %d.\n", n, result); return 0; }

typedef struct { int input; int output; } thread_args; void *thread_func ( void *ptr ) { int i = ((thread_args *) ptr)->input; ((thread_args *) ptr)->output = fib(i); return NULL; }

Tăng tốc 1.5 lầnCode cho CPU 2 nhânCPU 4 nhân Sửa code

Page 38: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song kiểu Lập trình song song kiểu truyền thốngtruyền thốngĐặc điểm

◦Theo mô hình song song về tác vụ ◦Không phù hợp với các kiến trúc máy tính

đa nhân/đa lõi mới. ◦Có nhiều vấn đề về lý thuyết chưa khắc

phục được trong mô hình lập trình song song theo tác vụ.

04/21/23 38

Page 39: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song dựa trên Lập trình song song dựa trên dữ liệudữ liệuMỗi phần của dữ liệu được chia

cho một bộ xử lý (tác vụ) thực hiện

04/21/23 39Source [2]

Page 40: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song dựa trên Lập trình song song dựa trên dữ liệudữ liệu

Đặc điểm của mô hình◦Song song các thao tác trên một tập

dữ liệu (VD: mảng hoặc ma trận)◦Mỗi tác vụ xử lý một phần dữ liệu của

cùng một CTDL◦Các tác vụ thực hiện cùng một thao

tác trên dữ liệu◦Phù hợp với kiến trúc đa nhân/đa lõi

mới◦Khắc phục nhiều vấn đề của lập trình

song song theo tác vụ.04/21/23 40

Page 41: Bài giới thiệu : Tổng quan về lập trình  song  song

Lập trình song song dựa trên Lập trình song song dựa trên dữ liệudữ liệu

Môi trường lập trình:◦Ngôn ngữ truyền thống (Fortran)◦Thư viện đồ họa (OpenGL, Direct3D)◦Ngôn ngữ mở rộng (CUDA)◦Ngôn ngữ xử lý theo kiểu mảng

04/21/23 41

Page 42: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ truyền thốngNgôn ngữ truyền thốngBắt nguồn từ lĩnh vực tính toán hiệu

năng cao (High Performance Computing)

Sử dụng rộng rãi trong các siêu máy tính

Ngôn ngữ Fortran (Fortran 90, HPF)◦Ví dụ: Cộng hai ma trận A và B

04/21/23 42

Fortran 90 Fortran 77

C = A + B DO I = 1, NDO J = 1, NC(I, J) = A(I, J) + B(I, J)END DO

END DO

Page 43: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ truyền thống Ngôn ngữ truyền thống Ưu điểm

◦Dựa trên những ngôn ngữ phổ biến (Fortran)

Khuyết điểm◦Không hỗ trợ nền tảng desktop

04/21/23 43

Page 44: Bài giới thiệu : Tổng quan về lập trình  song  song

Thư viện đồ họaThư viện đồ họaShading Language

◦OpenGL’s shading Language (GLSL)◦DirectX High Level Shader Language

(HLSL)Ưu điểm

◦Dựa trên đặc điểm chung của phần cứng GPU làm được trên nhiều GPU khác nhau

Khuyết điểm◦Không thể hiện được đặc điểm riêng của

mỗi card đồ họa◦Khó sử dụng

04/21/23 44

Page 45: Bài giới thiệu : Tổng quan về lập trình  song  song

Thư viện đồ họa – ví dụThư viện đồ họa – ví dụfloat main(float2 texcoord : TEXCOORD0,

uniform samplerRECT img) : COLOR{ float a, b, c, d; a = f1texRECT(img, texcoord); b = f1texRECT(img, texcoord + float2(0, 1)); c = f1texRECT(img, texcoord + float2(1, 0)); d = f1texRECT(img, texcoord + float2(1, 1)); return max(max(a, b), max(c, d));}

04/21/23 45Source [8]

Page 46: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ mở rộngNgôn ngữ mở rộngĐược phát triển và hỗ trợ bởi nhà

sản xuất phần cứngMở rộng dựa trên ngôn ngữ quen

thuộcGồm

◦XMT-C (PRAM trên Chip)◦CUDA - NVIDIA năm 2007◦CAL(Compute Abstraction Layer) –

AMD - Radeon

04/21/23 46

Page 47: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ mở rộngNgôn ngữ mở rộngƯu điểm

◦Gần với ngôn ngữ quen thuộc (chủ yếu C)

◦Đơn giản hóa (che đi phần song song)Khuyết điểm

◦Khó tối ưu

04/21/23 47

C CUDA

void incrementArray (float *a, int N){ int i; for (i=0; i < N; i++)

a[i] = a[i] +1.0f;}

__global__ void incrementArray (float *a, int N){ int idx = blockIdx.x*blockDim.x + threadIdx.x; if (idx < N)

a[idx] = a[idx] + 1.0f;}

Page 48: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ xử lý theo kiểu Ngôn ngữ xử lý theo kiểu mảngmảngTận dụng sức mạnh của các

CPU/GPU nhiều nhânƯu điểm

◦Code ngắn gọn và rõ ràngKhuyết điểm

◦Ý tưởng thiết kế dựa trên mảngGồm

◦RapidMind – CPU/GPU◦Acceleware – CPU/GPU

04/21/23 48

Page 49: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ xử lý theo kiểu Ngôn ngữ xử lý theo kiểu mảngmảng

04/21/23 49

C++ RapidMind

Thực hiện tính toán

float results[10000]; 

for(int i = 0; i < 10000; ++i){

result[i] = input1[i] + input2[i];}

Array< 1 , Value1f > output;

//Stream Program chạy trên dữ liệuProgram prg = RM_BEGIN {In<Value1f> a; // input 1In<Value1f> b; // input 2Out<Value1f> c; // output

c = a + b; //thao tác} RM_END;

output = prg(input1, input2);

Page 50: Bài giới thiệu : Tổng quan về lập trình  song  song

Ngôn ngữ xử lý theo kiểu Ngôn ngữ xử lý theo kiểu mảngmảng

04/21/23 50

C++ RapidMind

Xuất kết quả

for (int i = 0; i < 10000; ++i){ std::cout << "output[" << i << "] = (" << results[i] << ")" << std::endl;}

const float* results = output.read_data();

for (int i = 0; i < 10000; ++i){ std::cout << "output[" << i << "] = (" << results[i] << ")" << std::endl;}

Page 51: Bài giới thiệu : Tổng quan về lập trình  song  song

Tài liệu tham khảoTài liệu tham khảo

04/21/23 51

[1] Chas Boyd, “Data-parallel Computing”, ACM Queue vol. 6, no. 2, 2008

[2] Blaise Barney, “Introduction to Parallel Computing”, High Performance Computing Training Workshop, Lawrence Livermore National Laboratory, 2009

[3] Bài viết “The Problem: Moore's Law and Fast Numerical Software”

[4] Charles E. Leiserson và Ilya B. Mirman “How to Survive the Multicore Software Revolution”, Cilk Arts

[5] “Taking Parallelism Mainstream”, Parallel Computing Developer Center, Microsoft, 2009

[6] Stuart Oberman, “GPUs: High Performance Arithmetic for Graphics and General Purpose Computation” ARITH 19, 2009

[7] Ejaz Anwer, “Handling Multiple Processors in Your Code Using RapidMind”, Codeguru, 2007

[8] Ian Buck and Tim Purcell, “GPU Gems: Programming Techniques, Tips and Tricks for Real-Time Graphics”, ch. 37, Addison-Wesley, 2004