Có hai cấp độ bạn có thể phân tích tăng tốc song song với lũy thừa ma trận: Cấp độ "thuật toán vĩ mô" quyết định ma trận nào sẽ nhân lên và cấp độ "thuật toán vi mô" nơi bạn có thể tự tăng tốc độ nhân với song song.
nnO(log2(n))O(n)
(Lưu ý: trang wikipedia dành cho tính toán ma trận chung. Tôi không chắc liệu điều đó có thể được song song hơn nữa hay không bằng cách sử dụng thông tin mà chúng ta đang bình phương một ma trận.)
AmA
AkO(log(k))
Câu hỏi là: chúng ta có thể đánh bại điều này với sự song song không? Tôi khẳng định câu trả lời là không.
Lý do đơn giản là lũy thừa bằng bình phương thực chất là một thuật toán lập trình động; nó cho phép bạn bỏ qua tất cả các công việc bằng cách sử dụng lại các phần con, nhưng điều này lại tạo ra sự phụ thuộc dữ liệu không cho phép song song. Nếu chúng ta thoát khỏi sự phụ thuộc dữ liệu, nhưng chúng ta cũng tăng đáng kể số lượng công việc chúng ta phải làm.
k
A1A2A3A4A5...Ak
k2
(A1A2)(A3A4)(A5A6)...(Ak−1Ak)
kO(log(k))
Tuy nhiên, nếu chúng ta thực hiện phép lũy thừa theo cách này, nó sẽ trông như thế này:
(AA)(AA)(AA)...(AA)
A2
AknnAO(log2(n)log(k))O(nlog(k))