2.4.3.1. Mô tả thuật toán
Vài năm trở lại đây kiến trúc đa lõi ngày càng có ưu thế trong thế giới điện toán. Kết quả là, ta không còn có thể dựa vào kiến trúc đơn lõi để cải thiện hiệu suất thực thi các ứng dụng, thay vào đó, các lập trình viên phải chuyển sang kỹ thuật xử lý song song để nhận ra những lợi ích thực thi nhanh của các kiến trúc đa lõi. Trong khi nhiều nghiên cứu trong các thập kỷ qua đã tập trung vào các chương trình xử lý song song với các chương trình mang tính cân đối cao mà chủ yếu là làm việc trên các mảng và ma trận, ít nỗ lực tập trung vào các chương trình hoạt động bất thường trên con trỏ dựa trên cấu trúc dữ liệu như cây, đồ thị hay lưới tam giác bất thường. Trong bài toán xây dựng lưới tam giác dựa trên kỹ thuật song song tác giả thực hiện chia tập đỉnh ban đầu ra các phân đoạn có thể hoạt động hoàn toàn độc lập để xử lý song song dựa trên kỹ thuật thực hiện các tiểu trình cấp thấp. Để hiện thực thuật toán song song xây dựng lưới tam giác Delaunay tác giả đã đề xuất dựa trên phương pháp chia để trị được công bố trong công trình [2] .
Dưới đây là một số khái niệm cơ bản được đề cập:
Processing element (PE) hay processor (bộ xử lý) là một bộ phận điện toán chung
được mô tả bởi tập các tác vụ mà nó có khả năng thực thi. Các tác vụ thường là nạp và/hoặc lưu trữ dữ liệu từ bộ nhớ. Đơn vị điều khiển sẽ quyết định chỉ lệnh nào được thực thi.
Process (tiến trình) là một hoạt động nào đó sinh ra từ chương trình. Trạng thái của
nó được quyết định bởi vị trí của tác vụ được thực thi trong chương trình và bởi các giá trị tức thời của dữ liệu xử lý. Trạng thái thay đổi mỗi khi processor thực hiện tác vụ cần thực thi. Thường thì một processor sẽ chạy một process trong suốt vòng đời của process. Trong trường hợp đó, ta sẽ để dành processor ngắn hạn cho process ngắn hạn và ngược lại.
Thread (tiểu trình) cũng không khác process là mấy: để duy trì tiểu trình thì cần ít chi phí hơn tiến trình. Ta sẽ xem thuật ngữ tiểu trình và tiến trình là như nhau ở đây.
Công đoạn đầu tiên của thuật toán này là phân hoạch tập đỉnh thành các khối không giao nhau. Bắt đầu từ khung bao nhỏ nhất chứa tập đỉnh đầu vào, ta thực hiện quá trình phân hoạch thành các mảnh nhỏ hơn bằng cách luân chuyển thực hiện các lát cắt dọc và ngang ở chính giữa mỗi mảnh để tạo thành các mảnh nhỏ hơn [40] . Cách tiếp cận phân hoạch theo vùng khá giống với Lee S và các cộng sự đề cập trong công trình [36] nhưng tác giả cải tiến sử dụng luân phiên các nhát cắt ở giữa mỗi mảnh làm cho ranh giới ghép mảnh ở bước sau thường là nhỏ hơn nên quá trình gộp mảnh sẽ thực thi nhanh hơn. Một điều quan trọng nữa là cách phân hoạch tác giả đề cập là cho các mảnh ghép dễ “vuông hơn” và hiệu quả của thuật toán chèn đỉnh tuần tự nêu ở trên cũng trở nên hiệu quả hơn.
5 7
4 6
2 3
1
Hình 2.26. Phương pháp phân rã cho nguyên lý “chia đểtrị”
Lưu ý rằng việc tạo lưới tam giác nội tại trong mỗi của mảnh ở mức thấp nhất có thể được thực hiện đồng thời. Tuy nhiên, việc ghép các mảnh lân cận phải tuân thủ theo sơ đồ sau:
Đây là quá trình ngược lại của quá trình phân rã và sơ đồ này cho phép dễ dàng hỗ trợ hiện thực gộp song song thành lưới tam giác tổng thể.
Phương pháp phân rã theo sơ đồ trên cho phép dễ dàng cài đặt trên các hệ thống song song mà không cần thiết xử lý các đụng độ nên tốc độ thực thi cải thiện đáng kể. Các mảnh ghép ở mức thấp nhất sẽ được tạo thành lưới tam giác một cách đồng thời bằng cách đưa vào các tiểu trình. Ta có thể sử dụng semaphore để quản lý số lượng tiểu trình thực hiện đồng thời phù hợp tùy theo cấu hình máy tính.
Thuật toán xây dựnglưới tam giác Delaunay song song.
Bài toán: Cho là tập đỉnh trên mặt phẳng. Thực hiện xây dựng lưới tam giác Delaunay song song dựa trên nguyên lý chia để trị.
Bước 1: Thực hiện phân hoạch tập đỉnh ban đầu thành mảnh để có thể xử lý trên mỗi con vi xử lý hay tiểu trình ( là lũy thừa của : ) theo sơ đồ ở Hình 2.26. Ta nhận được tập hợp các mảnh con như [Hình 2.28(a)], ta ký hiệu mỗi mảnh con là .
Bước2:Thực hiện song song quá trình tạo lưới tam giác cho mỗi mảnh theo một phương pháp bất kỳ được xác định trước. [Hình 2.28(b)]
Bước 3: Trong mỗi được xây dựng, xác định các tam giác bảo đảm sẽ không phải hiệu chỉnh khi ghép lưới, còn lại là các tam giác nào có tiềm năng phải hiệu chỉnh khi ghép lưới. Để làm được điều này, ta sẽ được đánh dấu lại các tám giác có đường tròn ngoại tiếp cắt biên lưới. Chúng chính là các tam giác tiềm năng phải hiệu chỉnh khi ghép. [Hình 2.28(c)]
Bước 4: Trong mỗi , các tam giác có tiềm năng bị hiệu chỉnh sẽ được xóa đi. Các đỉnh độc lập sau khi xóa tam giác được lưu lại. [Hình 2.28(d)]
Bước 5: Tập các đỉnh được xác định ở bước trước sẽ tham gia vào quá trình ghép lưới tam giác theo sơ đồ ở [Hình 2.27] để tạo thành lưới tam giác Delaunay tổng thể. Kết thúc thuật toán. [Hình 2.28(e)]
2.4.3.1. Độ phức tạp thuật toán
Giả sử P là số tiểu trình tham gia thực hiện. Mỗi tiểu trình chỉ thực hiện phần công việc của nó. Độ phức tạp trung bình thuật toán chia lưới tam giác Delaunay với N đỉnh là . Vậy độ phức tạp thực thi cho mỗi tiểu trình sẽ là . Giả sử số lượng tiểu trình P là nhỏ hơn nhiều so với N nên độ phức tạp sẽ là . Độ phức tạp quá trinh gộp 2 mảnh theo phương pháp chia để trị là . Để ghép các mảnh thành dữ liệu tổng thể có độ phức tạp là . Tuy nhiên nếu thực hiện gộp song song theo sơ đồ ở Hình 2.27 thì độ phức tạp quá trình gộp sẽ là .
Vậy độ phức tạp tổng cộng của thuật toán xây dựng lưới tam giác Delaunay song
song là: =
Thực nghiệm đã chỉ ra rằng tốc độ thực thi của thuật toán xây dựng lưới tam giác song song thường có hiệu suất cao hơn phương pháp không song song một vài lần như thống kê trong Bảng 2.6.
(c)
(e) (d)
Hình 2.28. Nguyên lý củathuật toán xây dựnglưới tam giác Delaunay song song
(a)Thựchiện 4 lầncắt liên tụcđể tạo thành các mảnhnhỏ
(b) Xây dựnglưới tam giác Delaunay cho mỗimảnh
(c) Xác định các tam giác không bịhiệuchỉnh khi ghép
(d) Xác định các đỉnhđộclập khi xóa đi các tam giác có tiềmnăngbịhiệuchỉnh
(e) Quá trình ghép các mảnhlưới thành lưới tam giác tổngthể