Có thuật toán lũy thừa ma trận song song nào hiệu quả hơn phép nhân liên tiếp không?


11

Người ta bắt buộc phải tìm công suất (số nguyên dương) của ma trận các số thực. Có rất nhiều thuật toán nhân ma trận hiệu quả (ví dụ: một số thuật toán song song là Cannon, DNS ) nhưng có thuật toán nào được dùng chính xác để tìm sức mạnh của ma trận và hiệu quả hơn so với thực hiện tuần tự nhân ma trận? Tôi đặc biệt quan tâm đến các thuật toán song song.


1
Bạn đã thử những gì? Bạn bị kẹt ở đâu? Bạn đã làm nghiên cứu gì? Ngoài tiêu đề, câu hỏi ở đâu? Đối với phiên bản quyết định của vấn đề của bạn (từ tiêu đề), câu trả lời là "có", nhưng bạn đã biết rồi phải không?
Ác

2
@TomR Câu hỏi này có thể được bạn quan tâm
adrianN 17/8/2016

1
Có lẽ một cái gì đó như thế này ? Hoặc bạn đang tìm kiếm một cái gì đó khác? Kích thước và quyền hạn trong ứng dụng của bạn là gì?
Ác

1
Bạn có thể tính công suất thứ n với số nhân nhỏ hơn n-1 khi n ≥ 4. Đối với các ma trận lớn, thường sẽ rất đáng để tìm ra số nhân nhỏ nhất có thể (ví dụ: có một phương pháp đơn giản để tính n ^ 15 với 6 phép nhân, nhưng nó có thể được thực hiện với 5). Sau đó, bạn có thể áp dụng cùng một nguyên tắc để tìm số phép nhân liên tiếp nhỏ nhất, sẽ khó hơn.
gnasher729

1
Bạn cũng nên xem xét số lượng song song có sẵn cho bạn. "Song song" là về việc khai thác các tài nguyên mà nếu không được sử dụng. Nếu việc triển khai nhân ma trận có thể sử dụng hiệu quả tất cả các tài nguyên có sẵn, thì không có gì khác để khai thác để tính toán sức mạnh của ma trận.
gnasher729

Câu trả lời:


5

Nếu bạn có nhiều bộ xử lý có thể hoạt động song song, thì bạn có thể tính toán bất kỳ công suất nào lên tới công suất (2 ^ k) trong k bước. Ví dụ: Để tính , bạn tính:M15

Giai đoạn 1: Tính M2

Giai đoạn 2: Tính M 4 = M 2 * M 2M3=M2MM4=M2M2

Giai đoạn 3: Tính M 8 = M 4 * M 4M7=M4M3M8=M4M4

Giai đoạn 4: Tính M15=M8M7

Đây là một phép nhân nhiều hơn so với tính toán trong ba lần nhân và nâng M 5 lên công suất thứ ba trong hai phép nhân khác, nhưng sẽ nhanh hơn nếu bạn có hai bộ xử lý. Đối với quyền hạn cao tùy ý, bạn sẽ cần nhiều bộ xử lý hơn.M5M5

M3M3M2M4M2

M2=MMM3=M2MM2M3M2M3M4

M15M1000

M2M5

M6M25M25

M108M125k(k+1)2


4

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)...(Ak1Ak)

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))


3

mlogm2m

A=SΛS1Am=SΛmS1
mO(1)m
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.