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ý.