Khác với xử lí tuần tự, trong tính toán song song một số bộ xử lí kếthợp với nhau để giải quyết cùng một vấn đề nên giảm được thời gian xử lí vì mỗi thời điểm có thể có nhiều ph
Trang 1Mục lục
Lời nói đầu 3
Tài liệu tham khảo 5
Chương I: Tổng quan TTSS 6
1.1 Giới thiệu 6
1.2 Phân loại kiến trúc 7
1.3 Các thành phần của máy tính song song 14
1.4 Kiến trúc cụm máy tính 21
Chương II: Thiết kế thuật toán song song với các PPST 25
2.1 Các giai đoạn thiết kế thuật toán song song 25
2.2 Các nguyên lí thiết kế thuật toán song song 26
Kết luận 31
Trang 2Lời nói đầu
Công nghệ thông tin ngày càng được ứng dụng rộng rãi trong mọi mặtcủa cuộc sống, đặc biệt trong vấn đề xử lí một lượng dữ liệu lớn trong mộtquãng thời gian ngắn Trước những đòi hỏi cần có lời giải nhanh chonhững bài toán với kích thước dữ liệu lớn như: dự báo thời tiết, xử lý ảnh
ba chiều, trí tuệ nhân tạo, mô phỏng các hệ thống lớn…xử lý song song làmột hướng phát triển tất yếu và đang cần được nghiên cứu và ứng dụngrộng rãi vào thực tế
Tuy vậy, việc thiết kế các thuật toán song song một cách hiệu quả gặp rấtnhiều khó khăn Người thiết kế phải tính toán cân bằng giữa nhiều yếu tố,sao cho đạt hiệu quả cao nhất Điều đó đòi hỏi tư duy sáng tạo cao độ Đó
cũng chính là lí do em chọn đề tài này cho tiểu luận môn học Phương pháp nghiên cứu khoa học trong tin học Bài viết được chia làm 2 phần.
Chương 1 Tổng quan về xử lý song song
Chương 2 Thiết kế thuật toán song song trên tinh thần các nguyêntắc sáng tạo khoa học
Các phương pháp áp dụng trong bài tiểu luận này được rút ra từ nhữngkiến thức được truyền đạt trên lớp cùng với các thông tin thu thập trênInternet Qua đây, em xin gửi lời cám ơn chân thành đến thầy GS.TSKHHoàng Kiếm đã tận tình dạy bảo những kiến thức quý báu đó để em có thểhoàn thành đề tài này
TP.HCM, ngày 13 tháng 4 năm 2013
Trang 3Nhận xét của giảng viên
Trang 4
Tài liệu tham khảo
[1] Bài giảng môn học “Phương pháp luận sáng tạo khoa học”
GS.TSKH Hoàng Văn Kiếm
[2] Phương pháp luận sáng tạo khoa học – kỹ thuật
GS.TS Phan Dũng
[3] Introduction to Parallel Computing, Second Edition
Ananth Grama, Anshul Gupta, George Karypis, Vipin Kumar[4] http://www.cs.uncc.edu/~abw/parallel/par_prog/resources.htm[5] http://crd.lbl.gov/~dhbailey/cs267
[6] http://wikipedia.org
Trang 5CHƯƠNG I TỔNG QUAN VỀ XỬ LÍ SONG SONG
1.1 Giới thiệu Xử lí song song
Xuất phát từ yêu cầu giải quyết nhanh những bài toán bài toán có khốilượng dữ liệu lớn như xử lí ngôn ngữ tự nhiên, xử lí tiếng nói, xử lí ảnh bachiều, dự báo thời tiết, trí tuệ nhân tạo,…trong khi những máy tính xử lítuần tự kiểu Von Neumann hiện nay không đáp ứng được yêu cầu đó.Chính vì vậy vấn đề đặt ra là phải khai thác được khả năng xử lí song songcủa các hệ thống máy tính hiện đại
Xử lí song song là cách xử lí thông tin bằng việc sử dụng nhiều hơn một bộ
xử lí để thực hiện nhiều hơn một thao tác trên dữ liệu tại một thời điểm.
Xử lí song song thường được ứng dụng khi phải xử lí những vấn đềcần tốc độ xử lý cao như sau: Mô hình hóa và giả lập như: mô hình cácmẫu DNA, mô hình hóa chuyển động của các phi hành gia…, xử lý vàthao tác trên các dữ liệu rất lớn như: xử lý ảnh và tín hiệu, khai thác dữliệu và cơ sở dữ liệu, kác định địa chấn…hoặc các vấn đề “grandchallenge” (là những vấn đề không thể giải quyết trong thời gian “hợp lý”,như cần 100, 1000,…năm để có đáp án) như: mô hình khí hậu, sự chuyểnđộng của chất lỏng, bộ gene con người, mô hình chất bán dẫn
Khác với xử lí tuần tự, trong tính toán song song một số bộ xử lí kếthợp với nhau để giải quyết cùng một vấn đề nên giảm được thời gian xử lí
vì mỗi thời điểm có thể có nhiều phép toán được thực hiện đồng thời Vớitốc độ xử lí nhanh hơn, xử lí song song giải quyết được nhiều bài toán lớn
và phức tạp
Trang 61.2 Phân loại kiến trúc máy tính song song
Máy tính song song có thể được chia theo 2 lọai chính là : dòng điềukhiển (control flow) và dòng dữ liệu (data flow) Máy tính song song dòng điều khiển dựa chủ yếu theo các nguyên tắc của máy tính Von Neumann, ngọai trừ nhiều dòng điều khiển có thể thực hiện vào bất cứ thời gian nào Máy tính song song dòng dữ liệu , đôi khi được biết đến là “phi Von
Neumann”, thì hoàn toàn khác biệt ở chỗ nó không có con trỏ trỏ tới các chỉ thị hiện hành hay trung tâm điều khiển Ở đây chúng ta chỉ tập trung vào các máy tính song song dòng điều khiển
Năm 1966, M.J.Flynn đã phân chia các hệ thống máy tính dựa trên dòng chỉ thị và dòng điều khiển thành 4 loại sau:
SISD (Single Instruction stream, a Single Data stream)
SIMD (Single Instruction stream, Multiple Data streams)
MISD (Multiple Instruction streams, a Single Data stream)
MIMD (Multiple Instruction streams, Multiple Data streams)
Phân theo mức độ sử dụng: MIMD > SIMD > MISD
Trang 71.2.1 Kiến trúc SISD (đơn dòng lệnh, đơn luồng dữ liệu)
Máy tính loại SISD chỉ có một CPU, và ở mỗi thời điểm chỉ thực hiệnmột lệnh và chỉ đọc, ghi một mục dữ liệu Mô hình SISD chính là mô hìnhmáy tính kiểu Von Neumann
Hình 1.1 Mô hình của kiến trúc SISD
1.2.2 Kiến trúc SIMD (đơn dòng lệnh, đa luồng dữ liệu)
Những máy tính SIMD có một đơn vị điều khiển để điều khiển nhiềuđơn vị xử lí thực hiện một dòng các câu lệnh Đơn vị điều khiển phát sinhtín hiệu điều khiển tới tất cả các bộ xử lí thực hiên cùng một phép toántrên các mục dữ liệu khác nhau
Hình 1.2 Mô hình của kiến trúc SIMD
Bên trong SIMD, tồn tại hai lựa chọn thiết kế cơ bản sau:
Tín hiệu điều khiển
Trang 8Trong một máy SIMD, từng bộ xử lý có thể thực thi hay bỏ qua các chỉ thịđược quảng bá dựa vào trạng thái cục bộ của nó hay những điều kiện phụthuộc vào dữ liệu Tuy nhiên điều này có thể dẫn đến xử lý một vài tínhtoán điều kiện không hiệu quả Một cách giải quyết khả thi là sử dụng
phiên bản bất đồng bộ của S1IMD, được biết đến là SPMD (Single Program Multiple Data), trong đó từng bộ xử lý sẽ chạy một bản sao của chương
trình chung Điểm thuận lợi của SPMD là trong lúc tính toán biểu thứcđiều kiện “if-then-else”, từng bộ xử lý sẽ chỉ thực hiện ở nhánh thích hợp
mà không mất thời gian cho các chi phí tính toán khác
Chip SIMD tùy chọn hay thống nhất (commodity).
Một máy SIMD có thể được thiết kế dựa trên những thành phần thốngnhất hay là từ những con chip tùy chọn Trong cách tiếp cận thứ nhất thìcác thành phần có xu hướng rẻ hơn do sản xuất hàng loạt Tuy nhiênnhững thành phần mang mục đích chung như vậy có thể chứa các yếu tốkhông cần thiết cho một thiết kế cụ thể nào đó Những thành phần thêmvào có thể làm phức tạp việc thiết kế, sản xuất và kiểm thử các máy SIMD
và cũng có thể đem lại khiếm khuyết về tốc độ xử lý Còn các thành phầntùy chọn thì nhìn chung hỗ trợ tốt hơn cho thực thi tuy nhiên nó cũng dẫnđến chi phí cao hơn cho việc phát triển Khi việc tích hợp nhiều bộ xử lýcùng với bộ nhớ dư dật trên một con chip VLSI đơn trở nên khả thi, thìviệc kết hợp ưu điểm của hai cách tiếp cận trên là hoàn toàn có thể
1.2.5 Kiến trúc MISD (đa dòng lệnh, đơn luồng dữ liệu)
Máy tính loại MISD có thể thực hiện nhiều chương trình trên cùng mộtmục dữ liệu Kiến trúc kiểu này chia thành hai nhóm như sau:
Lớp các máy tính yêu cầu các đơn vị xử lí khác nhau có thể nhậnnhững lệnh khác nhau và thực hiện trên cùng một mục dữ liệu
Trang 9 Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự quamột dãy các bộ xử lí liên tiếp.
Hình 1.3 Mô hình của kiến trúc MISD
Mô hình này hầu như không thấy nhiều trong các ứng dụng Mộttrong những lý do là bởi vì hầu hết các ứng dụng không thế áp dụng mộtcách dễ dàng vào kiến trúc MISD, điều này dẫn đến việc thiết kế ra mộtkiến trúc để thỏa mãn cho một mục đích chung là điều không thể Tuynhiên có thể áp dụng các bộ xử lý song song kiểu MISD vào trong một ứngdụng cụ thể nào đó
Đơn vị điều khiển1
Đơn vị điều khiển 2
Đơn vị điều khiển n
Luồng
dữ liệu
Trang 10Trong hình trên là ví dụ về một bộ xử lý song song với kiến trúc MISD.Một dòng dữ liệu đơn đi vào một máy tính gồm 5 bộ xử lý Nhiều phépbiến đổi được thực hiện trên từng đơn vị dữ liệu trước khi nó được chuyểnsang một (hay nhiều) bộ xử lý khác Các đơn vị dữ liệu kế tiếp có thể điqua các phép biến đổi khác do điều kiện độc lập dữ liệu của các dòng chỉthị hay do các thẻ điều khiển đặc biệt được truyền cùng với dữ liệu Chính
vì vậy mà cách tổ chức theo kiến trúc MISD có thể được xem như là một hệthống ống lệnh cấp độ cao và phức tạp với nhiều đường dẫn và trong đótừng giai đọan có thể được lập trình riêng biệt
1.2.4 Kiến trúc MIMD (đa luồng lệnh, đa luồng dữ liệu)
Máy tính MIMD còn được gọi là đa bộ xử lí, mỗi bộ xử lí có thể thựcthi những luồng lệnh riêng trên các luồng dữ liệu riêng của chúng Đa sốcác hệ thống MIMD có bộ nhớ riêng và có thể truy cập vào bộ nhớ chungnên giảm được thời gian trao đổi giữa các bộ xử lí
Trang 11Hình 1.3.2 Mô hình của kiến trúc MIMDĐược tiên đoán bởi các doanh nghiệp vào thập niên 90, mô hìnhMIMD gần đây đã trở nên khá phổ biến Lý do cho sự thay đổi này là vìtính uyển chuyển cao của kiến trúc MIMD và bởi khả năng tận dụng đượcnhững ưu điểm của các bộ vi xử lý được sản xuất hàng lọat (commoditymicroprocessors), vì thế tránh được những vòng phát triển dài dòng vàqua đó có thể được phát triển cùng với sự cải thiện của các bộ xử lý Cácmáy tính MIMD được áp dụng rất hiệu quả cho các ứng dụng song song
mà vấn đề của nó được phân rã từ trung bình cho đến tốt (medium- tocoarse-grain parallel applications) Ưu điểm của các máy tính MIMD baogồm khả năng uyển chuyển cao trong việc khai thác nhiều dạng thức songsong khác nhau, dễ phân chia nhỏ hơn cho các bộ xử lý độc lập trong môitrường đa người dùng (tính chất này là ngụ ý quan trọng cho tính dunglỗi), ít khó khăn trong việc mở rộng (scalability) Nhưng bên cạnh đó kiếntrúc này cũng có khuyết điểm là sự quá tải do giao tiếp giữa các bộ xử lý
và việc lập trình gặp nhiều khó khăn
Bên trong kiến trúc MIMD, tồn tại 3 loại vấn đề cơ bản hay còn đượcgọi là cách lựa chọn thiết kế hiện vẫn là chủ đề đang được tranh cãi trongcộng đồng các nhà nghiên cứu
MPP – Massively Or Moderately Parallel Processor
Đơn vị điều khiển1
Đơn vị điều khiển 2
Đơn vị điều khiển n
Luồng dữ liệu 1
Luồng dữ liệu 2
Luồng dữ liệu 2
Trang 12Việc xây dựng một bộ xử lý song song từ một số lượng nhỏ các bộ xử lýmạnh mẽ hay từ một số lượng rất lớn các bộ xử lý bình thường (một “bầyvoi” hay là một “đàn kiến”) thì cách nào sẽ hiệu quả hơn ?.
Theo luật của Amdahl thì cách đầu tiên thích hợp hơn cho những phầntuần tự của một tính toán, trong khi cách tiếp cận thứ hai sẽ làm tăng tốchơn nữa những phần mang tính song song Không thể đưa ra một câu trảlời chung cho câu hỏi này, sự lựa chọn tốt nhất tùy thuộc vào loại côngnghệ và ứng dụng đang được sử dụng
MIMD “chặt chẽ” hay “lỏng lẻo”.
Cách tiếp cận nào tốt hơn cho việc tính toán hiệu năng cao, bằng cách sử dụng đa bộ xử lý được thiết kế đặc biệt trên nhiều máy tính hay là tập hợp của những máy trạm bình thường được kết nối với nhau bởi các hệ thống mạng “tiện nghi” (như là Ethernet hay ATM) và những tương tác nào sẽ được kết nối với nhau bằng hệ thống phần mềm đặc biệt và các hệ thống tập tin phân tán? Cách tiếp cận thứ hai đôi khi được biết đến là mạng của các máy trạm (network of workstations hay là NOW) hay là tính
toán cluster, đã được sử dụng rộng rãi trong những năm gần đây Tuy
nhiên vẫn còn nhiều vấn đề mở còn tồn tại nhằm phát huy tối đa khả năng của những kiến trúc có nền tảng là mạng Thiết bị phần cứng, hệ thống phần mềm, và những khía cạnh ứng dụng của NOW đang được đầu tư tìm hiểu bởi một số lượng lớn các nhóm ngiên cứu Một cách tiếp cận trung gian là kết hợp các cluster những bộ xử lý thông qua môi trường mạng Điều này về cơ bản là một phương pháp phân nhánh, đặc biệt thích hợp khi có một sự truy cập rất lớn đến dữ liệu cục bộ.
Truyền thông điệp tường minh hay chia sẻ bộ nhớ ảo.
Lọai nào sẽ tốt hơn, cho phép người dùng chỉ ra tất cả các loại thôngđiệp sẽ được truyền giữa các bộ xử lý hay là cho phép họ lập trình ở mộtcấp độ trừu tượng cao hơn, cùng với các thông điệp cần thiết tự động được
Trang 13phát sinh bởi hệ thống phần mềm? Câu hỏi này về cơ bản là tương tự vớicâu được hỏi trong những ngày đầu của những ngôn
ngữ lập trình cấp cao và bộ nhớ ảo Tại một vài thời điểm trong quá khứ,việc lập trình bằng hợp ngữ và thực hiện trao đổi giữa bộ nhớ chính và bộnhớ phụ có thể đem lại hiệu quả cao hơn Tuy nhiên, do ngày nay cácphầm mềm đã đạt đến mức quá phức tạp, các trình biên dịch cùng với hệđiều hành cũng đã quá cấp cao đến nỗi việc tối ưu các chương trình bằngtay không còn là điều gì quá khó Tuy nhiên chúng ta vẫn chưa ở thờiđiểm xử lý song song đáng kể, và việc che giấu cấu trúc giao tiếp tườngminh giữa các máy tính song song ra khỏi người lập trình sẽ đem lại hiệunăng thực thi rất đáng kể
1.3 Các thành phần chính của máy tính song song
Trang 14Bộ nhớ mức 1 là bộ nhớ mức cao nhất thường gắn chặt với bộ xử líthành bộ nhớ cục bộ Khi mức bộ nhớ tăng dần thì dung lượng tăng dầncòn giá cả và tốc độ giảm dần.
Mô hình bộ nhớ đối với máy tính truy cập ngẫu nhiên song song đượcbiết dưới tên gọi PRAM (Parallel Random Access Machine) bao gồm bộnhớ chung RAM với M ô nhớ đủ lớn để chia sẻ cho P bộ xử lí Bộ nhớchung dùng để lưu trữ dữ liệu và là nơi giao tiếp giữa các bộ xử lí, nó chophép các bộ xử lí truy cập dữ liệu và hoạt động một cách dị bộ Có một sốcách để các bộ xử lí có thể đọc ghi một số dữ liệu:
Đọc đồng thời CR (Concurrent Read): nhiều bộ xử lí có thể đọcđồng thời từ một ô nhớ
Đọc độc quyền ER (Exclusive Read): mỗi bộ xử lí đọc được chínhxác một ô nhớ và mỗi ô nhớ chỉ được đọc bởi một bộ xử lí
Ghi đồng thời CW (Concurrent Write): nhiều bộ xử lí có thể ghivào cùng một ô nhớ ở cùng một thời điểm
Ghi độc quyền EW (Exclusive Write): mỗi bộ xử lí chỉ ghi đượcvào một ô nhớ và mỗi ô nhớ chỉ được ghi bởi một bộ xử lí
Dễ nhận thấy rằng ER và EW là những trường hợp riêng của CR và
CW Trong đó CW có những đặc tính sau:
Ghi đồng thời có ưu tiên (Priority CW): mỗi bộ xử lí được gắnvới một mức ưu tiên, bộ nhớ có mức ưu tiên cao nhất sẽ đượcquyền ghi vào một ô nhớ cho trước Các mức ưu tiên có thể tĩnhhoặc động theo qui tắc xác định
Ghi đồng thời chung (Common CW): tất cả các bộ xử lí đượcphép ghi vào cụng một ô nhớ nếu chúng ghi cùng một giá trị
Trang 15Khi đó một bộ xử lí sẽ được chọn để thực hiện việc ghi dữ liệuđó.
Ghi đồng thời tự do (Arbitracy CW): một số bộ xử lí muốn ghidữ liệu vào một ô nhớ nhưng chỉ một bộ xử lí được phép Trongtrường hợp này ta phải chỉ ra cách xác định bộ xử lí được chọn
Ghi đồng thời ngẫu nhiên (Random CW): bộ xử lí được chọn đểghi dữ liệu là ngẫu nhiên
Ghi đồng thời kết hợp (Combining CW): tất cả các giá trị mà các
bộ xử lí muốn ghi đồng thời lên một ô nhớ sẽ được kết hợp lạithành một giá trị và giá trị này sẽ được ghi vào ô nhớ đó
Một số mô hình bộ nhớ cho máy truy cập ngẫu nhiên song songPRAM:
1 Mô hình truy cập bộ nhớ đồng bộ UMA (Uniform MemoryAccess) của bộ nhớ chia sẻ: tất cả các bộ xử lí làm việc nhờ cơ chếchuyển mạch tập trung để truy cập tới bộ nhớ chia sẻ Thời giantruy cập vào bộ nhớ là như nhau với tất cả các bộ xử lí
2 Mô hình truy cập bộ nhớ không đồng bộ NUMA của bộ nhớ chiasẻ: trong mô hình này, bộ nhớ được phân tán và được chia thànhmột số môđun nhớ độc lập Bộ nhớ chia sẻ được phân tán cho tất
cả các bộ xử lí được gọi là các môđun nhớ địa phương và cácmôđun nhớ này hợp lại thành bộ nhớ chung (toàn cục) cho các
bộ xử lí
3 Kiến trúc bộ nhớ chỉ lưu trữ COMA ( Cache-Only Memory Architexture ): bộ nhớ chính được phân tán và chuyển thành các vùng lưu trữ (cache), tất cả các vùng này tạo ra không gian địa chỉ toàn cục