bài giới thiệu : tổng quan về lập trình song song
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 PresentationTRANSCRIPT
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
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
Xử LÝ SONG SONGXử LÝ SONG SONG
04/21/23 3
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
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
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
Đườ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
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
Ứ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
Ứ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
XU HƯớNG PHÁT XU HƯớNG PHÁT TRIểN CủA CPUTRIểN CủA CPU
04/21/23 11
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
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
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
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
Power Wall Power Wall
04/21/23 16
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
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/
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
Memory WallMemory Wall
04/21/23 20
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
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
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
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]
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]
LậP TRÌNH SONG LậP TRÌNH SONG SONGSONG
04/21/23 26
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]
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);});}
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
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]
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
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
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
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]
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]
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
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
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
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]
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
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
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
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
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
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]
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
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;}
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
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);
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;}
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