Ví dụ thiết kế giải thuật song song cho bài toán tính tổng

Một phần của tài liệu nghiên cứu các giải thuật song song trên hệ thống xử lý đồ họa GPU đa lõi (Trang 33 - 35)

Phát biểu bài toán: Tính tổng của N số (n1, n2,…, nN), trong đó N là lũy thừa của 2. Giả sử dữ liệu nằm trên các lá của cây nhị phân (xem Hình 2.1. ) .

1.2.5.1. Xây dựng giải thuật tuần tự

Giải thuật tuần tự cho bài toán tính tổng: Đầu vào: Mảng A[1..n], n = 2i

Đầu ra: Tổng lưu tại A(1) Begin

- 26 - for i = 2 to n dopar A(1) += A(i) endfor End Phân tích độ phức tạp

Dễ dàng thấy được độ phức tạp của thuật toán là O(n).

1.2.5.2. Xây dựng giải thuật song song

Có thể được thực hiện tính toán theo cách sau, có

2

N

bộ xử lý được giao nhiệm vụ tính toán tổng các cặp dữ liệu, ví dụ (n1, n2), (n3, n4), …, (nN-1, nN). Kết quả này có thể thực hiện trong một bước tính toán. Tiếp theo, dùng

4

N

bộ xử lý

để thực hiện cùng công việc trên

4

N

cặp dữ liệu, … Rõ ràng các tính toán tiến hành từ lá tới gốc và toàn bộ quá trình tính toán sẽ kết thúc khi mà phần tử xử lý tại gốc thực hiện xong tính toán của nó.

Hình 2.1. Tính tổng N số

Giải thuật song song:

Đầu vào: Mảng A[1..n], n = 2i Đầu ra: Tổng lưu tại A(1)

- 27 - Begin 1. p = n/2 2. while( p > 0 ) do • for i = 1 to p dopar

A(i) = A(2i-1) + A(2i)

• endfor

• p = p/2 3. endwhile End

Phân tích độ phức tạp

Gọi P là số bộ xử lý. Vòng lặp while thục hiện logn lần, mỗi lần thời gian tính là O(1) và đòi hỏi p bộ xử lý. Tại bước đầu cần nhiều bộ xử lý nhất p =

2

n

. Do trong giải thuật không có đòi hỏi cạnh tranh đọc cũng như cạnh tranh ghi nên giải thuật có thể cài đặt với thời gian O(logn) với O(n) bộ xử lý.

Một phần của tài liệu nghiên cứu các giải thuật song song trên hệ thống xử lý đồ họa GPU đa lõi (Trang 33 - 35)