Ch4_Lap Trinh Song Song
Transcript of Ch4_Lap Trinh Song Song
PHƯƠNG PHÁP
LẬP TRÌNH SONG SONG
TÀI LIỆU THAM KHẢO
1. https://computing.llnl.gov/tutorials/parallel_comp/
NỘI DUNG
• Giới thiệu tính toán song song. (Parallel Computing)
• Kiến trúc bộ nhớ máy tính song song
• Các mô hình lập trình song song.
• Hiệu năng của tính toán song song.
• Song song multi-thread trong java
GIỚI THIỆU LẬP TRÌNH SONG SONG
Tính toán song song (parallel computing) là gì?
Tại sao cần tính toán song song?
Làm thế nào để song song hóa chương trình?
GIỚI THIỆU LẬP TRÌNH SONG SONG
Xử lý tuần tự
Bài toán tách thành một chuỗi các câu lệnh rời rạc.
Các câu lệnh được thực hiện một cách tuần tự
Tại một thời điểm chỉ thực hiện một câu lệnh.
GIỚI THIỆU LẬP TRÌNH SONG SONG
Xử lý song song:
Bài toán được tách thành nhiều phần và có thể thực hiện
đồng thời.
Mỗi phần được tách thành các lệnh rời rạc.
Mỗi lệnh được thực hiện từ những CPU khác nhau.
GIỚI THIỆU LẬP TRÌNH SONG SONG
So với tính toán tuần
tự tính toán song
song phù hợp cho
mô hình, mô phỏng,
nhiều vấn đề phức
tạp trong thế giới
thực.
GIỚI THIỆU LẬP TRÌNH SONG SONG
Tại sao?
Tiết kiệm thời gian và tiền bạc
Giải quyết các bài toán lớn
Cung cấp tính đồng thời
Tối ưu, sử dụng tài nguyên không cục bộ
GIỚI THIỆU LẬP TRÌNH SONG SONG
Ai dùng tính toán song song?
Khoa học & Công nghệ (Science & Engineering)
Sản xuất & Thương mại (Industrial & Commercial)
GIỚI THIỆU LẬP TRÌNH SONG SONG
GIỚI THIỆU LẬP TRÌNH SONG SONG
(Vendors?)
GIỚI THIỆU LẬP TRÌNH SONG SONG
Những thành phần liên quan đến vấn đề XLSS
Kiến trúc máy tính song song
Phần mềm hệ thống (hệ điều hành),
Thuật toán song song
Ngôn ngữ lập trình song song, v.v.
GIỚI THIỆU LẬP TRÌNH SONG SONG
NNLT song song
Mở rộng những ngôn ngữ lập trình tuần tự hiện có, bổ sung
thêm những cấu trúc mới, cơ chế khởi tạo, đồng bộ, trao đổi
giữa các tiến trình song song, giải quyết xung đột khi truy
cập dữ liệu.
Xây dựng một ngôn ngữ lập trình song song mới.
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
Bộ nhớ chia sẻ (shared memory)
Điểm chung là các processor truy cập vùng nhớ như không
gian địac chỉ toàn cục.
Multi processors có thể họat động độc lập nhưng chia sẻ tài
nguyên bộ nhớ như nhau.
Thay đổi trong bộ nhớ do một processor này thì visible với
tất cả các processors khác.
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
Bộ nhớ phân tán (Distributed Memory)
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
Bộ nhớ phân tán (Distributed Memory)
Cần mạng truyền thông để kết nối bộ nhớ bên trong các processor.
Các processors có bộ nhớ cục bộ riêng. Địa chỉ bộ nhớ trong một
processor không map đến processor khác. Không có khái niện không
gian địa chỉ toàn cục thông qua tất cả các processors.
Những thay đổi của processor trong bộ nhớ cục bộ của nó không có ảnh
hưởng trên bộ nhớ của processor khác.
Khi một processor cần truy cập data trong processor khác, đó là task của
LTV. LTV cần định nghĩa làm thế nào và khi nào data được trao đổi.
Công việc đồng bộ là trách nhiệm của LTV.
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
Bộ nhớ Chia sẻ - Phân tán (Hybrid Distributed-Shared Memory)
KIẾN TRÚC BỘ NHỚ MÁY TÍNH SONG SONG
(Parallel Computer Memory Architectures)
Bộ nhớ Chia sẻ - Phân tán (Hybrid Distributed-Shared Memory)
Thành phần bộ nhớ chia sẻ có thể là máy bộ nhớ chia sẻ hay đơn vị xử
lý đồ họa GPU.
Thành phần bộ nhớ phân tán là sự kết nối (networking) của nhiều máy
bộ nhớ chia sẻ/GPU.
Xu hướng hiện nay cho thấy kiểu kiến trúc bộ nhớ này sẽ tiếp tục phát
triển và chiếm ưu thế trong tương lai.
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Bộ nhớ chia sẻ (shared memory without threads)
Luồng (threads)
Bộ nhớ phân tán/truyền thông điệp (Distributed memory/Message Passing)
Song song dữ liệu (Data Parallel)
Lai (Hybrid)
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình bộ nhớ chia sẻ: (without threads)
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Các tasks chia sẻ một không gian địa chỉ chung.
Các cơ chế locks/semaphores được dùng để kiểm sóat truy
cập bộ nhớ chia sẻ.
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình luồng:
Chương trình chính được chia thành các nhiệm vụ.
Mỗi nhiệm vụ được thực hiện bởi các luồng đồng thời.
Mỗi luồng có dữ liệu riêng của nó và chia sẻ dữ liệu toàn cục
của chương trình chính.
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình luồng:
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình truyền thông điệp:
- Chương trình được chia thành các nhiệm vụ.
- Mỗi nhiệm vụ thực hiện trên tài nguyên cục bộ.
- Các nhiệm vụ trao đổi với nhau qua hai phương thức gửi và
nhận.
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình truyền thông điệp:
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình song song dữ liệu:
- Các nhiệm vụ của chương trình làm việc với cùng một cấu
trúc dữ liệu.
- Mỗi nhiệm vụ làm việc trên từng phân vùng khác nhau của dữ
liệu.
- Giúp lập trình các chương trình song song được thực hiện trên
một tập dữ liệu lớn.
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình song song dữ liệu:
CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Mô hình lai:
- Là sự kết hợp của hai hay nhiều mô hình lập trình song song
lại với nhau.
- Mô hình truyền thông điệp + mô hình luồng/mô hình chia sẽ
bộ nhớ chung.
- Mô hình song song dữ liệu + mô hình truyền thông điệp.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Định luật Amdahl’s: việc tăng tốc một chương trình phụ thuộc vào
tỷ lệ code (P) được song song hóa.
Không có code được song song P = 0 and the speedup = 1 (no speedup).
Nếu tất cả các code được song song P = 1, speedup không xác định
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Khi có một số lượng processors thực hiện các công việc song song.
P: tỷ lệ song song; N: số lượng processor; S tỷ lệ tuần tự
Sự phụ thuộc thời gian vào số lượng BXL của định luật Amdahl’s
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Cân bằng tải
- Khối lượng công việc của các BXL cần phải được phân phối hợp
lí trong suốt quá trình tính toán.
- Cân bằng tải nhằm mục đích làm thay đổi sự phân phối khối
lượng công việc giữa các BXL trong quá trình tính toán.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Cân bằng tải tập trung:
- Sử dụng thông tin hệ thống có tính chất toàn cục để lưu trạng thái
của các máy riêng biệt trong hệ thống.
- Thông tin này cho phép phân phối công việc cho các BXL.
- Khối lượng công việc tăng theo tỉ lệ thuận với số lượng các BXL.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Cân bằng tải phân tán hoàn toàn:
- Mỗi BXL có một bản sao thông tin về trạng thái của hệ thống.
- Các BXL trao đổi thông tin trạng thái với nhau và sử dụng thông
tin này để thay đổi công việc phân chia => không tốt bằng các
thuật toán cân bằng tải tập trung.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Cân bằng tải một nữa:
Chia các BXL thành từng miền.
Trong mỗi miền sử dụng thuật toán cân bằng tải tập trung để
phân phối công việc cho các BXL thuộc miền đó.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
Sự bế tắc (deadlock):
- Các tiến trình bị rơi vào tình trạng bế tắc nếu mỗi tiến trình đó
nắm giữ tài nguyên mà một vài tiến trình khác yêu cầu sử dụng
nó để xử lý.
HIỆU NĂNG CỦA TÍNH TOÁN SONG SONG
LẬP TRÌNH MULTI-THREAD TRONG JAVA
HỆ ĐIỀU HÀNH ĐA NHIỆM
Hệ điều hanh đa nhiệm hiện đại, hô trơ thread:
Đơn vị cơ bản sử dụng CPU la thread.
Thread một đoạn cac cau lệnh được thi hanh.
Mỗi process có một khong gian địa chỉ và nhiều thread điều khiển.
Mỗi thread có bộ đếm chương trinh, trạng thai cac thanh ghi và
ngăn xếp rieng.
LUỒNG/THREAD
Luồng của một qua trinh có thê chia sẻ nhau khong gian địa
chỉ: Biến toan cục, tập tin, chương trinh con, . . .
Luồng chia sẻ thời gian sư dụng CPU => Luồng cung có cac
trạng thai:
Săn sang (ready), Đang chạy (running), Nghẽn(Block).
Luồng cung cấp cơ chê tính toan song song trong cac ứng dụng.
CHƯƠNG TRÌNH MULTITHREAD
MULTITHREAD VỚI JAVA
java.lang.Thread
Thread trong java la một đối tượng của lớp java.lang.Thread
Một chương trinh cai đạt thread bằng cach tạo ra cac lớp con của
lớp Thread.
Lớp Thread có 3 phương thức cơ bản:
public static synchronized void start(): Chuân bi moi thứ
cần thiết đê thực hiện thread.
java.lang.Thread
public void run():
Chứa ma lệnh thực hiện cong việc thực sư của thread.
run() được gọi một cach tư động bởi start().
public void stop(): kết thuc một thread.
Thread kết thuc khi:
Hoạc tất cả cac lệnh trong run() đã đuơc thực thi.
Hoạc phuơng thức stop() cua luồng đuơc goi.
TẠO VÀ QUẢN LÝ THREAD
DÙNG LỚP THREAD
DÙNG LỚP THREAD
DÙNG LỚP THREAD
SỬ DỤNG RUNNABLE
SỬ DỤNG RUNNABLE
SỬ DỤNG RUNNABLE
THREADS – THREAD STATES
VÒNG ĐỜI THREAD
LƯU Ý
VÍ DỤ
VÍ DỤ
VÍ DỤ
VÍ DỤ
CHẠY LẦN 1, 2
ĐỘ ƯU TIÊN
VÍ DỤ ĐỘ ƯU TIÊN
VÍ DỤ ĐỘ ƯU TIÊN
VÍ DỤ ĐỘ ƯU TIÊN
VÍ DỤ ĐỘ ƯU TIÊN
THREADS - SCHEDULING
THREADS - SCHEDULING
ĐỒNG BỘ HÓA
ĐỒNG BỘ HÓA
ĐỒNG BỘ HÓA
ĐỒNG BỘ HÓA
ĐỒNG BỘ HÓA
SONG SONG MULTICORES VỚI JAVA API
SONG SONG MULTICORES VỚI JAVA API