Cây bát phân tuần tự

Một phần của tài liệu Song song hoá bước biểu diễn cây bát phân trong thuật toán nhanh giải bài toán n body và tính toán thử nghiệm trên PC (Trang 44 - 49)

CHƯƠNG 2. THUẬT TOÁN KHAI TRIỂN ĐA CỰC NHANH VÀ PHƯƠNG PHÁP CÂY BÁT PHÂN

2.3. Cây bát phân tuần tự

Trước khi đi vào phần chính xây dựng và duyệt cây bát phân song song của luận văn giới thiệu chương trình xây dựng cây bát phân tuần tự và đưa ra một số kết quả chạy thử để cho thấy việc cần thiết phải song song hóa cây bát phân như thế nào.

Với cách tổ chức cây theo cổ truyền thì mỗi node được biểu diễn bởi một cấu trúc như sau:

struct tree { char name[20];

struct tree *children;

Body *bodies;

};

Trong đó name là tên của node, children là con trỏ để chỉ tới các node con, bodies là thông tin của các body nằm trong node đó (kiểu Body).

typedef struct { int n;

int m;

double (*x)[3];

double (*v)[3];

double (*a)[3];

double *p;

} Body;

Với n là số body trong một node; m là mảng chứa khối lượng của các body; x, v, a lần lượt là các mảng chứa thông tin về vị trí, vận tốc, gia tốc của các body; p là thế năng của các body.

Việc biểu diễn cây như trên thì để tìm đến một node nào đó trong cây không có cách nào khác ngoài việc phải duyệt cây để tìm kiếm. Quá trình duyệt cây như vậy tốn khá nhiều thời gian, nhất là với cây được xây dựng từ một hệ N-body lớn.

Chương trình dùng khóabảng băm để tổ chức cây tỏ ra ưu việt hơn trong việc tìm kiếm các node. Thay vì biểu diễn cây bởi danh sách cấu trúc các con trỏ móc nối, chương trình dùng các mảng để biểu diễn cây. Cụ thể:

Body *Bindex;

Mortonkey *Bkey;

int *Cnbody;

Body *Cbody;

Body **Cchild;

Body *Cparent;

Và một cấu trúc để lưu thông tin của các body typedef struct{

int n;

int m;

double (*x)[3];

double (*v)[3];

double (*a)[3];

double *p;

} Nbodyinfo;

Trong đó Bindex là mảng chứa các khóa; Bkey là mảng chứa các khóa Morton;

Cnbody là mảng cho biết số body chứa trong node; Cbody là mảng chứa danh sách các body trong node đó; Cchild là mảng lưu các node con; Cparent là mảng cho biết node cha. Cấu trúc Nbodyinfo chứa thông tin của các body trong hệ.

Như vậy với phương pháp biểu diễn cây dưới dạng mảng như thế này ta có thể

Việc xây dựng cây bát phân tuần tự trong chương trình được tóm tắt như sau:

• Tạo ô gốc

• Tạo khóa

• Sắp xếp các body

• Tạo cây

o Bắt đầu từ ô gốc

o Duyệt và lần lượt lưu thông tin về các ô con vào các mảng trên

o Quá trình được lặp đi lặp lại cho đến khi độ cao của cây đạt đến mức tốt nhất (log8N)

Sau khi xây dựng xong, ta có một cây bát phân được tổ chức thông qua các mảng.

Ví dụ ta có một cây được gán khóa như sau (giả sử mỗi node chứa 8 body):

Khi đó cây được biểu diễn bởi các mảng:

- Node gốc (0):

Cnbody[0] = -1; Cparent[0] = -1; Cchild[0][0] = 1;

Cchild[0][1] = 2; Cchild[0][2] = 3; Cchild[0][3] = 4;

Cchild[0][4] = 5; Cchild[0][5] = 6; Cchild[0][6] = 7;

Cchild[0][7] = 8;

Hình 2.8 – Cây bát phân được gán khóa 0

1 2 3 4 5 6 7 8

9 10 11 12 …

- Node con (4):

Cnbody[4] = 8; Cparent[4] = 0; Cchild[4][0] = 9;

Cchild[4][1] = 10; Cchild[4][2] = 11; Cchild[4][3] = 12; … Như vậy để truy nhập đến node nào trong cây ta chỉ việc truy nhập trực tiếp tới phần tử mảng tương ứng. Và với việc tổ chức cây như trên, ta dễ dàng phân chia dữ liệu cho các bộ xử lý khi tạo cây song song sau này.

2.3.2. Kết quả thử nghiệm

Với phương pháp biểu diễn cây bát phân ở trên (1.3.1), chúng tôi đã cài đặt một chương trình tuần tự viết trên C. Thời gian liên quan với số N lượng các body trong hệ cho trong bảng sau:

Số body (k) Độ cao của cây Thời gian (s)

8 4 0.013569

16 4 0.028030

32 5 0.065067

64 5 0.138076

128 5 0.278422

256 6 0.605949

512 6 1.246626

1024 6 2.587589

2048 7 5.620052

Bảng 3 - Thời gian tạo cây bát phân (chương trình tuần tự)

Bảng trên là kết quả chạy thử với số body bằng 8k, 16k, 32k, 64k, 128k, 256k, 512k, 1024k, 2048k (với nk = n*1024). Với tổng thời gian tạo cây bát phân thu được như ở trên cho thấy số body càng lớn thì việc tạo cây càng mất nhiều thời gian. Như vậy thời gian tạo cây không nhiều lắm nhưng việc tổ chức cây như vậy sẽ rất thuận tiện cho quá trình duyệt cây sau này. Thời gian duyệt cây để khai triển đa cực sẽ tốn nhiều thời gian do đó ý tưởng song song hóa cây bát phân sẽ làm tăng tốc độ lên rất nhiều, nhất là với các hệ lớn bởi công việc khai triển và tính lực được chia sẻ cho nhiều BXL cùng thực hiện.

Một phần của tài liệu Song song hoá bước biểu diễn cây bát phân trong thuật toán nhanh giải bài toán n body và tính toán thử nghiệm trên PC (Trang 44 - 49)

Tải bản đầy đủ (PDF)

(69 trang)