1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Cơ sở dữ liệu >

CHƯƠNG IV: ĐỀ XUẤT MÔ HÌNH CÀI ĐẶT SÓNG ĐỆ QUY PHÂN TÁN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 78 trang )


 

quy ngập lụt và lớn nhất bằng tổng của thời gian lớn nhất khi sóng đi và tổng thời gian

lớn nhất khi sóng về. Ta có biểu thức sau:

Deadtimeseq _ Wave < Deadtimespanningtree _ Wave < Deadtime flood _ Wave



Sau khi đã xác định được hai thành phần đầu tiếp đến chúng ta lựa chọn các công nghệ

có thể đáp ứng cho việc viết các ứng dụng chạy sóng đệ quy. Sóng đệ quy có thể được

thực hiện bằng các lời gọi thủ tục từ xa RPC, hoặc bằng cơ chế gửi nhận các tin nhắn,

do vậy tất cả các công nghệ hỗ trợ các cách thức trên đều có thể được dùng để cài đặt

sóng đệ quy. Trên thực tế có nhiều công nghệ có thể đáp ứng được như:

• Message Passing Interface: Đây không phải là một ngôn ngữ lập trình mà là

một chuẩn cho việc gửi nhận, quản lý truyền tin nhắn giữa các tiến trình trong

các node khác nhau.

• Java RMI: bao gồm rất nhiều các thư viện phục vụ cho việc truyền nhận dữ liệu

giữa các máy tính trên một mạng.

• RPC trên ngôn ngữ C

II. Đề xuất Message Passing Interface cho sóng đệ quy:

1. MPI và lịch sử phát triển:

Message passing là một mô hình lập trình được sử dụng rộng rãi trong tính toán song

song đặc biệt là các máy tính Scalable Parallel Computer với các bộ nhớ phân tán và

trên Network of Workstations. Sử dụng khái niệm processes communicating thông qua

tin nhắn dễ dàng trong việc tiếp cận. Chuẩn MPI định nghĩa các giao diện người dùng

và các khả năng của message passing. Chuẩn này được hoàn thành tháng 6 năm 1994,

MPI được chấp nhận và sử dụng rộng rãi. Mặc dù message passing thường được dùng

cho các máy tính song song với bộ nhớ phân tán, nó có thể dùng cho mạng máy tính

hoặc tập hợp các tiến trình chạy trên một máy tính đơn lẻ.

MPI là một thư viện về việc chuyển các tin nhắn dựa trên sự thống nhất của diễn đàn

MPI bao gồm hơn 40 các tổ chức bao gồm các nhà sản xuất, các nhà nghiên cứu, các

nhà phát triển thư viện lập trình… Mục tiêu của MPI là thiết lập một chuẩn hiệu quả

và mềm dẻo cho việc chuyển tin nhắn mà sẽ được sử dụng rộng rãi cho việc viết các

chương trình truyền tin nhắn, đây cũng là chuẩn đầu tiên độc lập với các hãng hàng

đầu về CNTT. MPI không phải là một chuẩn của ISO hoặc IEEE nhưng thực tế nó đã

trở thành một chuẩn công nghiệp cho việc viết các ứng dụng truyền tin nhắn trên kiến

trúc máy tính hiệu năng cao (High Performance Computer).

Lịch sử phát triển:



Trang 66 



 

• MPI là kết quả từ những nỗ lực của những cá nhân cũng như tổ chức từ những

thảo luận tại diễn đàn năm 1992 và 1994.

• Những năm 1980 đầu 1990, các nhà phát triển tính toán song song và bộ nhớ

phân tán đã nhận thấy cần thiết một chuẩn cho việc phát triển.

• Tháng 4 năm 1992: Hội thảo về chuẩn MPI trong môi trường bộ nhớ phân tán,

các tính năng căn bản của một chuẩn MPI đã được thảo luận.

• Tháng 11 năm 1992: Hội thảo tại Minneapolis đã đưa ra bản thảo đề nghị

(MPI1).

• Tháng 11 năm 1993: tại hội thảo siêu máy tính, bản thảo chuẩn MPI đã được

đưa ra.

• Bản thảo cuối cùng được phát hành vào tháng 5 năm 1994.

• MPI-2 ra đời năm 1996 và hiện nay MPI là tổ hợp của cả MPI-1 và MPI-2.

2. Cấu trúc chung một ứng dụng MPI:



Dưới đây là một ví dụ về cấu trúc chung của một chương trình MPI, chương trình thực

hiện tính số π .

#include "mpi.h"

#include

int main( int argc, char *argv[] )

{

int n, myid, numprocs, i;

double PI25DT = 3.141592653589793238462643;



Trang 67 



 

double mypi, pi, h, sum, x;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

while (1) {

if (myid == 0) {

printf("Enter the number of intervals: (0 quits) ");

scanf("%d",&n);

}

MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

if (n == 0)

break;

else {

h = 1.0 / (double) n;

sum = 0.0;

for (i = myid + 1; i <= n; i += numprocs) {

x = h * ((double) i - 0.5);

sum += (4.0 / (1.0 + x*x));

}

mypi = h * sum;

MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,

MPI_COMM_WORLD);

if (myid == 0)

printf("pi is approximately %.16f, Error is %.16f\n",

pi, fabs(pi - PI25DT));

}

}

MPI_Finalize( );

return 0;

}



Trong đoạn mã ta thấy các phần bố cục một chương trình MPI rất rõ ràng:





#include "mpi.h"



là phần thêm thư viện mpi phục vụ cho việc gọi các hàm



mpi.

• Phần khởi tạo môi trường MPI:

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);



• Tiếp đến là phần xử lý thuật toán và truyền tin nhắn giữa các tiến trình nằm

trong câu lệnh while.

• Phần dừng môi trường MPI:

MPI_Finalize( );



Trang 68 



 



3. Các khái niệm cơ bản về MPI:

a. Một số khái niệm cơ bản:

Trong mô hình tính toán song song sử dụng việc truyền tin nhắn, các tiến trình thực thi

song song và có các không gian địa chỉ khác biệt. Việc giao tiếp giữa các tiến trình xảy

ra là kết quả của quá trình copy một không gian đia chỉ của tiến trình này sang không

gian địa chỉ của tiến trình khác. Hoạt động này được đóng gói trong hai hàm send và

receive, câu hỏi đặt ra là số lượng nhỏ nhất các tham số cho các hàm này?

Với bên gửi, cần xác định dữ liệu cho việc giao tiếp và tiến trình đích nơi dữ liệu được

gửi đến. Cách tối ưu để mô tả dữ liệu là xác định địa chỉ bắt đầu và độ dài dữ liệu tính

theo byte. Bên phía nhận, các tham số cần là địa chỉ và độ dài của vùng nhớ. Ngoài ra,

cần một kí hiệu cho việc điều khiển các tin nhắn nhận được, bằng cách thêm vào type

hoặc là tag cho tin nhắn. Các hàm cơ bản với các tham số ít nhất có thể được thể hiện

như sau:

send (address, length, destination, tag)

receive (address, length, source, tag, actlen)



Bộ đệm các tin nhắn MPI có dạng (address, count, datatype)

Đặt tên các tiến trình: Các tiến trình phụ thuộc vào các nhóm. Nếu một nhóm chứa n

tiến trình, các tiến trình của nhóm được nhận diện bởi rank là các số nguyên từ 0 đến

n-1.

Các communicator là khái niệm ngữ cảnh và nhóm được tổ hợp với nhau, đây là tham

số cho các dạng hoạt động point to point và các hoạt động thu thập. Các tham số

destination và source trong hàm send, receive chính là rank của tiến trình. Hàm MPI

cho việc gửi tin nhắn đi như sau:

MPI_Send(address,count,datatype,destination,tag,comm)



Các chương trình MPI được xây dựng từ 6 hàm cơ bản nhất



Ngoài ra để tăng thêm các tính năng, các hàm khác được thêm vào với nhiều mục đích:



Trang 69 



 













Các hàm tăng thêm tính mềm dẻo như các hàm về datatype

Các hàm tăng thêm tính mạnh mẽ như các hàm về gửi nhân không khóa.

Các hàm tăng thêm tính hiệu quả như các hàm về trạng thái.

Các hàm liên quan đến group và communicator.

Các hàm tăng thêm sự thuận lợi như hỗ trợ topology, thu thập hoạt động…



Chuẩn MPI bao gồm:

















Các giao tiếp điểm điểm (Point-to-point communication).

Các hoạt động thu thập thông tin.

Xử lý với các nhóm.

Giao tiếp giữa các miền.

Xử lý topology.

Quản lý môi trường MPI và các truy vấn môi trường.

Kết nối các interface.



Do MPI là một chuẩn do đó nó không có các hoạt động chia sẻ bộ nhớ, không có các

công cụ xây dựng ứng dụng cũng như là các ứng dụng gỡ lỗi (debug tool), với các ứng

dụng đa luồng, quản lý các tác nhiệm, các chức năng vào ra chỉ được hỗ trợ ở chuẩn

MPI2.

b. Giao tiếp điểm điểm (Point-to-Point Communication):

Trong giao tiếp điểm điểm, cơ chế giao tiếp là chuyển dữ liệu giữa hai tiến trình một

bên gửi và một bên nhận. Hầu hết các xây dựng của MPI đều xoay quanh giao tiếp

điểm đến điểm. MPI cung cấp một tập các hàm gửi và nhận cho phép giao tiếp các

dạng dữ liệu liên quan đến tag. Chúng ta xem xét ví dụ sau về giao tiếp điểm đến

điểm:

char msg[20];

int myrank, tag = 99;

MPI_Status status;



MPI_Comm_rank( MPI_COMM_WORLD, &myrank); /* find my rank */

if (myrank==0){

strcpy(msg,”Hello there”);

MPI_Send( msg, strlen(msg)+1, MPI_CHAR, 1, tag,MPI_COMM_WORLD);

}else if (myrank==1){

MPI_Recv( msg, 20, MPI_CHAR, 0, tag, MPI_COMM_WORLD, &status);

}



Trang 70 



 

Trong ví dụ này tiến trình 0 gửi một tin nhắn đến tiến trình 1, mã được thực thi trên cả

hai tiến trình. Tiến trình 0 gửi một chuỗi kí tự sử dụng hàm MPI_Send(). Ba tham số

đầu tiên của lời gọi xác định dữ liệu được gửi đi: được lấy từ msg. Tham số thứ 4 xác

định đích đến của tin nhắn là tiến trình 1. Tham số thứ 5 xác định message tag. Tham

số cuối cùng là một communicator để các định một communicator của miền cho giao

tiếp này. Rank của các tiến trình là các số nguyên và được lấy ra bởi truy vấn đến

communicator trong hàm MPI_Comm_rank(). MPI_COMM_WORLD là

communicator mặc định. Tiến trình nhận xác định được dữ liệu đến được đặt trong

msg và có tối đa 20 phần tử với dạng là MPI_CHAR. Biến status được thiết lập bởi

MPI_Recv() đưa thông tin về nguồn và tag của tin nhắn và số lượng các phân từ được

nhận. Ví dụ, bên nhận có thể kiểm tra biến này để tìm độ dài thực tế của chuỗi kí tự

nhận được. Dạng dữ liệu khớp giữa hai bên gửi và nhận và giao tiếp chuyển dữ liệu

trên hệ thống không đồng nhất

4. MPICH2:

MPICH2 là một thực hiện hiệu năng cao và trên diện rộng của chuẩn MPI bao gồm cả

chuẩn MPI1 và MPI2. Mục tiêu của MPICH2 là:

• Cung cấp thực hiện MPI một cách hiệu quả hỗ trợ các nền tính toán và giao tiếp

khác nhau như các sản phẩm thương mại (hệ thống máy bàn, hệ thống chia sẻ

bộ nhớ, kiến trúc đa lõi), mạng tốc độ cao (10Gbs Ethernet, InfiniBand…) và

các hệ thống tính toán cao cấp (Blue Gên, Cray, SiCortex)

• Cho phép mở rộng các framework có nguồn gốc khác.



Trang 71 



 



PHẦN KẾT LUẬN



Sau một thời gian nghiên cứu em nhận thấy đề tài sóng đệ quy phân tán là đề tài rất

hấp dẫn, có khả năng áp dụng lớn trong thực tế cũng như khả năng phát triển trên

nhiều khía cạnh khác nhau. Do thời gian hạn hẹp nên việc nghiên cứu của em chỉ dừng

lại ở mức mô hình hóa, chưa cài đặt cụ thể trên một ngôn ngữ nhất định cũng như là

chưa cài đặt trên môi trường thực. Công việc này em sẽ cố gắng thực hiện trong thời

gian tới để hoàn thiện hơn về một đề tài sóng đệ quy phân tán. Sau đây là những đúc

kết của em khi nghiên cứu đề tài này:

Sóng đệ qui là một công cụ mới để xây dựng các ứng dụng phân tán. Kỹ thuật này có

các ưu điểm sau:

- Đây là một cấu trúc bậc cao cho phép quản lý trao đổi thông tin giữa các tiến trình,

không cần sử dụng đến các hàm thông báo nguyên thủy.

- Cho phép xây dựng các thuật toán đơn giản, dễ hiểu và không ảnh hưởng đến hiệu

năng.

- Đảm bảo sự độc lập giữa đặc tả của thuật toán và topology của mạng truyền thông.

Các thông tin toàn cục không cần được biết trước.

- Trong trường hợp chỉ có một tiến trình kích hoạt thuật toán, thuật toán kết thúc khi

sóng đệ qui trở về với tiến trình kích hoạt: có thể phát hiện được sự kết thúc của thuật

toán.

Sóng đệ qui được xây dựng trên cơ sở các thuật toán đệ qui và sóng phân tán. Như vậy

sóng đệ qui rất thích hợp cho việc thiết kế các giải thuật phân tán. Với sự hỗ trợ của

mô hình, việc triển khai sóng đệ qui phục vụ cho các giải thuật đệ qui tuần tự trên các

hệ thống song song trở nên dễ dàng. Thay vì việc phải khử đệ qui các thuật toán đệ qui

tuần tự rồi song song hóa, với sóng đệ qui chúng ta có thể áp dụng trực tiếp giải thuật

đệ qui tuần tự vào hệ thống song song, bằng cách chuyển các lời gọi thủ tục tuần tự

thông thường thành các lời gọi thủ tục phân tán, có tính đến việc phân tải hợp lý.

Các công việc đã thực hiện trong luận văn là:

1. Đưa ra một mô hình toán học của sóng đệ qui;

2. Đưa ra qui trình xây dựng một giải thuật dựa trên sóng đệ qui.



Trang 72 



 

3. Áp dụng sóng đệ quy phân tán vào một số thuật toán phân tán như snapshot,

election.

4. Đưa ra mô hình chung cho việc cài đặt cho sóng đệ quy phân tán.

Trong tương lai, sóng đệ qui sẽ được nghiên cứu mở rộng theo các hướng:

- Tự động hóa sóng đệ qui, tạo ra các macros cho phép đưa trực tiếp các mã của

thuật toán đệ qui tuần tự mà không cần phải thay đổi các lời gọi.

- Sử dụng sóng đệ qui để xây dựng một giao thức thu thập các thông tin về bộ vi

xử lý: hệ số sử dụng, thời gian rỗi của CPU, không gian bộ nhớ.

- Xây dựng cơ chế xác định tập tiến trình sẽ được thực hiện dựa trên các tham số

thu được.

- Xây dựng cơ chế lời gọi thủ tục từ xa để cài đặt các lời gọi sóng đệ qui.

- Cài đặt sóng đệ qui trên MPI (Message Passing Interface).



Trang 73 



 



TÀI LIỆU THAM KHẢO

[1] Distributed recursive waves – Trung Ha Quoc, Marc Bui

[2] An efficient APSP algorithm – Ivan Lavallée, Marc Bui, Trung Ha Quoc - 2004

[3] Systematic building of a distributed recursive algorithm – Gérard Florin, Roberto

Gómez, Ivan Lavallée

[4] Distributed system: Principles and Paradigms – Andrew S. Tanenbaum Maarten

Van Steen

[5]Echo Algorithms: Depth Parallel Operations on General Graphs – Ernest J. H.

Chang - 1982

[6]Principles of Concurrent and Distributed Programming –M. Ben-Ari - 2nd version

2006

[7]Recursive Distributed programming scheme – G. Florin, R. Gomez, I. Lavallée

[8]The wave algorithms as a Self-stabilizing control structure – L. Duchien, G. Florin,

R. Gomez, L. Seinturier

[9] Introduction to Distributed Algorithms – Rachid Guerraoui, Luís Rodrigues - draff

version

[10] A Distributed Algorithm for Minimum-Weight Spanning Trees – R.G.Gallager,

P.A. Humblet, P. M. Spira

[11] Yet another distributed election and spanning tree algorithm – Ivan Lavallee,

Christian Lavault.

[12] Distributed Snapshots: Determining Global States of Distributed Systems - K.

Mani Chandy, Leslie Lamport -1985

[13] Elections in a Distributed Computing System - Hector Garcia, Molina - 1982

[14] Implementing Remote Procedure Calls - Andrew D. Birrell, Bruce Jay Nelson 1984



Trang 74 



 

[15] Super-Recursive Algorithms - Mark Burgin - 2005

[16] A Non-blocking Snapshot Algorithm for Distributed - WeiJen Wang, Carlos A.

Varela.

[17] Distributed Algorithms – Nancy A. Lynch - 1997

[18] An introduction to snapshot algorithm in distributed computing - Ajay D

Kshemkalyani, Michel Raynal, Mukesh Singhal - The British Computer Society, The

Institution of Electrical Engineers and IOP Publishing Ltd. 1994

[19] A Distributed Spanning Tree Algorithm for Topology Aware Network - Arjan

J.Mooij, Nicolae Goga, Wieger Wesselink - Unknow publisher- 2003

[20] Using MPI: Portable Parallel Programming With the Message-passing Interface Gropp William, Lusk Ewing, Skjellum Anthony - MIT Press - 1999



Trang 75 



Xem Thêm
Tải bản đầy đủ (.pdf) (78 trang)

×