Mô hình phân hoạch dữ liệu

Một phần của tài liệu 28032_1712202001913700NGUYENDANGKHOA.compressed (Trang 28)

6. Ý nghĩa khoa học và thực ti ễn ca đề tài

1.4.4.Mô hình phân hoạch dữ liệu

Mô hình lập trình song song 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. Tập dữ liệu đây thư ng được sắp xếp theo một cấu trúc nhất định như là mảng hoặc theo khối. Với mô hình này thì 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. Tuy nhiên mỗi nhiệm vụ sẽ làm việc trên từng phân vùng khác nhau c a dữ liệu và các nhiệm vụ phải thực hiện các thao tác giống nhau.

Hình 1.9. Mô t lp trình phân hoch d liu

Trong kiến trúc chia sẽ bộ nhớ chung, tất cả các nhiệm vụ truy cập vào cấu trúc dữ liệu thông qua bộ nhớ toàn cục. Còn đối với kiến trúc bộ nhớ phân tán thì dữ liệu được chia ra và lưu trữ trên các bộ nhớ cục bộ c a các bộ xử lý.

1.2. L p trình song song trongămôiătr ng MPI 1.2.1. Gii thiu

Message Passing Interface - MPI là một chuẩn mới được sử dụng rộng rãi nhất. Nó không phải là một ngôn ngữ lập trình mới, thay vào đó nó là một thư viện c a chương trình con mà có thể được gọi từ chương trình C và Fortran 77.

MPI được phát triển b i một diễn đàn m quốc tế, bao gồm các đại diện từ ngành công nghiệp, các học viện và phòng thí nghiệm c a chính ph . Nó đã nhanh chóng được chấp nhận rộng rãi b i được thiết kế cẩn thận cho phép hiệu suất tối đa trên một loạt các hệ thống, và nó dựa trên truyền thông điệp, một trong những mô hình mạnh mẽ nhất và được sử dụng rộng rãi cho lập trình các hệ thống song song.

Những nỗ lực cho MPI bắt đầu vào mùa hè năm 1991, khi một nhóm nhỏ các nhà nghiên c u bắt đầu thảo luận tại một nơi hẻo lánh trên núi Úc.

Nội dung đó lại được thảo luận tại hội thảo “Tiêu chuẩn cho truyền thông điệp trong một môi trư ng bộ nhớ phân tán” (Standards for Message Passing in a Distributed Memory environment) tổ ch c vào ngày 29 - 30 tháng 4 năm 1992 tại Williamsburg, Virginia. Tại hội thảo này, các tính năng cơ bản cần thiết cho một MPI

chuẩn đã được thảo luận, mà một nhóm cộng tác đã được thành lập để tiếp tục quá trình tiêu chuẩn hoá. Jack Dongarra, Rolf Hempel, Tony Hey và David W.Walker đưa ra một bản dự thảo sơ bộ được biết đến như MPI-1 trong tháng 11 năm 1992.

Trong tháng 11 năm 1992, một cuộc họp c a nhóm cộng tác MPI đã được tổ ch c tại Minneapolis, mà tại đó hội thảo quyết định đặt các quá trình tiêu chuẩn hoá trên một cơs chính th c hơn. Nhóm cộng tác MPI đã gặp nhau 6 tuần một lần trong suốt 9 tháng đầu c a năm 1993. Bản dự thảo chuẩn MPI đã được trình bày tại hội nghị Siêu máy tính năm 93 trong tháng 11 năm 1993.

Sau một th i gian nhận những ý kiến đóng góp từ cộng đồng, một số kết quả được thay đổi trong MPI, phiên bản 1.0 c a MPI được phát hành vào tháng 6 năm 1994. Thông qua những cuộc gặp gỡ và thư điện tử, các nhà nghiên c u đã thảo luận với nhau thành lập diễn đàn MPI, trong đó tất cả các thành viên c a cộng đồng điện toán hiệu suất cao đều có thể đăng ký làm thành viên c a diễn đàn.

MPI đã thu hút sự tham gia khoảng 80 ngư i từ 40 tổ ch c, ch yếu là Mỹ và Châu Âu. Hầu hết các nhà cung cấp chính c a máy tính đều được tham gia vào MPI cùng với các nhà nghiên c u từcác trư ng đại học, phòng thí nghiệm c a chính ph và ngành công nghiệp.

Như tên gọi c a nó MPI được xây dựng nhằm sử dụng trong các chương trình để khai thác hệ thống các bộ xử lý bằng cách truyền thông điệp. Giao th c truyền thông điệp MPI là một thư viện các hàm và macro có thể được gọi từ các chương trình sử dụng ngôn ngữ C, Fortran, và C++.

1.2.2. Mt sđặc điểm ca lp trình MPI

MPI là một giao th c truyền thông độc lập với ngôn ngữ dùng để lập trình máy tính song song. MPI hỗ trợ cả giao tiếp điểm - điểm và giao tiếp tập thể. Mục tiêu c a MPI là hiệu suất, khả năng m rộng và khả năng di động cao.

MPI thư ng xuyên chạy trên các máy tính chia sẻ bộ nhớ. Mặc dù MPI thuộc về lớp th 5 và lớp cao hơn c a mô hình OSI, nhưng những triển khai có thể baogồm hầu hết các lớp, với socket và TCP (Transmission Control Protocol) được dùng trong tần vận chuyển.

Hầu hết các triển khai MPI bao gồm một thiết lập định tuyến riêng có thể được gọi trực tiếp từ C, C++, Fortran hay bất kỳ ngôn ngữ nào có giao diện với các thư viện, bao gồm C#, Java hoặc Python. Những ưu điểm ucar MPI vượt qua những thư viện truyền thông điệp cũ là tính di động (MPI có thể được triển khai cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc độ (MPI thực hiện nguyên tắc tối ưu hoá cho phần c mà nó chạy).

ngôn ngữ. Phiên bản đầu tiên được phát hành chỉ định ràng buộc ANSI C và Fortran 77 cùng với LIS. Năm 2008, chuẩn MPI-1.3 ch a khoảng 128 ch c năng, đây cũng là phát hành cuối cùng c a seri MPI-1 trong năm 2008.

Phiên bản MPI-2.2 bao gồm những tính năng mới như là I/O song song, quản lý tiến trình động và điều hành bộ nhớ từ xa. LIS c a MPI-2 thiết lập hơn 500 hàm và cung cấp ràng buộc ngôn ngữ cho ANSI C, ANSI C++ và ANSI Fortran (Fortran 90). Khả năng tương tác đối tượng cũng được thêm vào để cho phép lập trình truyền thông điệp bằng ngôn ngữ hỗn hợp dễ dàng hơn.

MPI cung cấp mô hình liên kết ảo, đồng bộ hoá và ch c năng liên lạc giữa một tập hợp các tiến trình (đã được ánh xạ tới các nút/máy ch /máy tính cụ thể) trong một ngôn ngữ độc lập, với cú pháp ngôn ngữ đặc trưng (ràng buộc), cùng với một vài tính năng ngôn ngữ đặc trưng. Những chương trình MPI luôn luôn làm việc với các tiến trình, nhưng những lập trình viên thư ng xem các tiến trình như là những bộ vi xử lý. Thông thư ng, để đạt hiệu suất tối đa, mỗi CPU (hoặc 1 nhân trong một máy tính đa nhân) sẽ được giao chỉ một tiến trình duy nhất.

Những ch c năng thư viện MPI bao gồm (không giới hạn) những hoạt động nhận/gửi loại điểm - điểm, lựa chọn giữa mô hình xử lý logic Cartesian hoặc mô hình xử lý logic đồ thị tương đồng, trao đổi dữ liệu giữa những cặp tiến trình, kết hợp các kết quả từng phần c a tính toán (thu thập và giảm các hoạt động), đồng bộ hoá các nút cũng như thu thập thông tin liên quan đến mạng như số lượng c a tiến trình trong phiên tính toán, nhận dạng bộ vi xử lý hiện tại mà bộ vi xử lý được ánh xạ, những tiến trình lân cận truy cập trong một mô hình liên kết logic.

* M cătiêuăthi tăk ăc aăMPIăbaoăg m:

- Thiết kế một giao diện lập trình ng dụng. Mặc dù MPI gần đây được sử dụng như một chương trình dịch và một thư viện th i gian chạy, nhưng thiết kế c a MPI ch yếu phản ánh nhu cầu nhận th c c a những ngư i lập trình ng dụng.

- Cho phép truyền thông một cách hiệu quả: tránh việc sao chép dữ liệu từ bộ nhớ sang bộ nhớ và cho phép gối chồng (overlap) giữa các tính toán và truyền thông và offload để truyền thông đồng xử lý khi có thể.

- Cho phép thực thi trên một môi trư ng không đồng nhất.

- Có thể được gắn kết dễ dàng vào trong các chương trình ngôn ngữ C và Fortran.

- Cung cấp một giao th c truyền thông tin cậy: ngư i dùng không cần phải lo lắng tới thất bại trong truyền thông. Các thất bại này được xử lý b i các hệ thống truyền thông cơ s phía sau.

song hiện tại như PVM (Parallel Vitual Machine), NX, Express... và cung cấp các m rộng cho phép độ linh hoạt cao hơn.

- Định nghĩa một giao th c có thể được thực thi trên các môi trư ng (flatform) c a nhiều nhà cung cấp mà không cần thay đổi nào đáng kể trong truyền thông cơ s và phần mềm hệ thống.

- Ngữ nghĩa c a giao th c là độc lập với ngôn ngữ.

- Giao th c được thiết kế cho phép sử dụng luồng một cách an toàn. *Cácătínhănĕngăch ăy u c aăMPI (adsbygoogle = window.adsbygoogle || []).push({});

- Một lượng lớn các hàm truyền thông điểm - điểm (phong phú hơn rất nhiều so với các môi trư ng lập trình song song khác).

- Một lượng lớn các th tục truyền thông chọn lọc, được sử dụng để giao tiếp giữa một nhóm các bộ xử lý trong hệ thống.

- Một ngữ cảnh truyền thông hỗ trợ cho việc thiết kế các thư viện phần mềm song song.

- Có khả năng xác định các topology truyền thông.

- Có khả năng định nghĩa các kiểu dữ liệu mới để mô tả các thông báo dựa trên các dữ liệu không liên tục.

*Cácăti nătrình

Một chương trình MPI bao gồm các bộ xử lý độc lập, thực thi các mã lệnh riêng c a chúng trong một mô hình MIMD (Multiple Instruction Multiple Data). Các tập lệnh được thực thi b i các bộ xử lý không nhất thiết phải giống nhau, việc truyền thông giữa các bộ xử lý được thực hiện thông qua việc gọi các hàm truyền thông c a MPI.

MPI không định rõ kiểu thực thi cho mỗi bộ xử lý. Bộ xử lý A có thể chạy tuần tự, hoặc có thể thực thi dạng đa luồng với các luồng được kích hoạt đồng th i. Điều này thực hiện được do tính chất luồng an toàn (thread-safe) c a MPI bằng cách tránh sử dụng các trạng thái tuyệt đối.

* ngăd ngăMPI

Một ng dụng MPI có thể được thực thi như là một tập các nhiệm vụ truyền thông đồng th i. Một chương trình bao gồm các đoạn mã c a ngư i lập trình được liên kết với các hàm thư viện được cung cấp b i phần mềm MPI. Mỗi nhiệm vụ được chỉ định một th hạng (rank) duy nhất trong khoảng 1-> n-1 với các ng dụng có n nhiệm vụ. Các hạng này được sử dụng để xác định các nhiệm vụ MPI khác nhau trong việc gửi và nhận tin cũng như thực hiện các thao tác truyền thông nói chung. Nhiệm vụ MPI có thể chạy trên cùng bộ xử lý hoặc các bộ xử lý khác nhau một cách đồng th i. Lợi ích c a các rank là làm cho thao tác phối hợp độc lập với vị trí vật lý c a các thành phần.

1.2.3. Mt s vấn đề hiệu năng

1.2.3.1. Năng lực tính toán

Việc song song hóa một chương trình nhằm làm cho chương trình đó chạy nhanh hơn, tuy nhiên chương trình đó sẽ chạy nhanh hơn bao nhiêu lần? Định luật Amdahl’s cho phép ta xác định điều này. Giả sử xét về khía cạnh th i gian chạy chương trình, một phần p c a chương trình có thể song song hóa và phần 1p còn lại buộc phải chạy tuần tự. Trong trư ng hợp lý tư ng, nếu thực thi chương trình sử dụng n bộ xử lý, th i gian chạy chương trình sẽ là 1-p + p/n c a th i gian chạy chương trình một cách tuần tự. Đây là hệ quả trực tiếp c a định luật Amdahl áp dụng cho trư ng hợp thực thi lý tư ng.

Ví dụ: nếu 80% chương trình có thể được song song hóa, và ta có 4 bộ xử lý, th i gian chạy song song sẽ là: 1 - 0.8 + 0.8/4 = 0.4 t c là bằng 40% th i gian chạy tuần tự.

20 80

Hình 1.10. Khnăng tăng tốc độtính toán, trường hợp lý tưởng

Đối với chương trình trên, th i gian chạy song song sẽ không thể nào nhỏ hơn 20% th i gian chạy tuần tự cho dù ta sử dụng số lượngvô cùng lớn các bộ xử lý.

Trên thực tế, khi chạy một chương trình song song, thư ng xuất hiện các chi phí truyền thông và việc phân công công việc không cân bằng giữa các bộ xử lý. Do đó th i gian chạy chương trình sẽ là:

Hình 1.11. Khnăng tăng tốc độtính toán, trường hp thc tế

Do vậy để tăng tốc độ c a chương trình ta cần:

-Tăng tỉ lệ (thành phần) được song song hóa c a chương trình. -Phân công công việc một cách công bằng cho các bộ xử lý. -Giảm tới m c tối thiểu th i gian truyền thông.

1.2.3.2. Cân bng ti

Giả sử rằng nếu dữ liệu được phân tán trên các bộ nhớ địa phương c a các bộ xử lý trong hệ thống nhiều máy tính, khi đó khối lượng công việc c a các bộ xử lý cần phải được phân phối hợp lý trong suốt quá trình tính toán. Trong nhiều trư ng hợp, giả sử này là đúng, tuy nhiên trong thực tế điều này không phải lúc nào cũng thực hiện được. Giải pháp được đưa ra đây là cân bằng tải động 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 bộ xử lý trong quá trình thực hiện tính toán.

Thông thư ng sau khi phân phối khối lượng công việc cho các bộ xử lý, quá trình cân bằng tải động thực hiện bốn bước cơ bản sau:

- Giám sát hiệu năng c a các bộ xử lý.

- Trao đổi thông tin trạng thái giữa các bộ xử lý.

- Tính toán và ra quyết định phân phối lại khối lượng công việc. - Thực hiện việc chuyển đổi dữ liệu thực sự.

Để thực hiện được điều này, rất nhiều thuật toán đã được đề xuất. Ngư i ta phân lớp các thuật toán này theo các chiến lược: tập trung, phân tán hoàn toàn (fully distributed) và phân tán một nửa (semi distributed).

Cácăthu tătoánăcơnăbằngăt iăt pătrung

Các thuật toán này thư ng đưa ra quyết định có tính chất tổng thể trong việc phân phối lại khối lượng công việc cho các bộ xử lý. Một vài thuật toán trong lớp này (adsbygoogle = window.adsbygoogle || []).push({});

sử dụng thông tin hệ thống có tính toàn cục để lưu trạng thái các máy tính riêng lẻ. Thông tin này sẽ giúp thuật toán phân phối công việc một cách dễ dàng. Tuy nhiên, khối lượng thông tin tăng theo tỉ lệ thuận với số lượng các bộ xử lý, do đó nó đòi hỏi khối lượng lớn bộ nhớ trên mộtbộ xử lý để lưu thông tin trạng thái. Vì vậy thuật toán thuộc lớp này không được tiếp cận một cách rộng rãi.

Cácăthu tătoánăcơnăbằngăt iăphơnătánăhoƠnătoƠn

Trong các thuật toán dạng này, mỗi bộ xử lý có một bản sao về thông tin trạng thái c a hệ thống. Các bộ xử lý trao đổi thông tin trạng thái với nhau và sử dụng các thông tin này để làm thay đổi một cách cục bộ việc phân chia công việc. Tuy nhiên các bộ xử lý chỉ có thông tin trạng thái cục bộ nên việc cân bằng tải không tốt bằng các thuật toán cân bằng tải tập trung.

Cácăthu tătoánăcơnăbằngăt iăphơnătánăm tăn a

Các thuật toán thuộc lớp này chia các bộ xử lý 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 bộ xử lý thuộc miền đó.

1.2.3.3. S bế tc

Các tiến trình xử lý 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 đang yêu cầu để xử lý. Lý do tiềm ẩn c a sự bế tắc là do nhiều tiến trình cùng sử dụng nguồn tài nguyên chung mà không có sự kiểm soát tốt.

Đối với các hệ thống đa máy tính, một trong những sự bế tắc phổ biến nhất là bế tắc vùng đệm (buffer deadlock) xảy ra khi một tiến trình đợi một thông điệp mà thông điệp này có thể không bao gi nhận được do vùng đệm đã đầy.

B năđi uăki năsauălƠănguyênănhơnăgơyăraăb ăt c:

1. Sự loại trừ lẫn nhau: mỗi tiến trình có sự độc quyền trong việc sử dụng tài nguyên c a nó.

2. Không có sự ưu tiên: Mỗi tiến trình không bao gi giải phóng tài nguyên mà nó đang chiếm giữ cho tới tận khi không còn sử dụng chúng nữa.

3. Sự ch đợi tài nguyên: mỗi tiến trình đang chiếm giữ tài nguyên trong khi lại ch

Một phần của tài liệu 28032_1712202001913700NGUYENDANGKHOA.compressed (Trang 28)