Có bất kỳ vấn đề / thuật toán nổi tiếng nào trong điện toán khoa học không thể được tăng tốc bằng cách song song hóa không? Dường như với tôi trong khi đọc sách về CUDA rằng hầu hết mọi thứ đều có thể.
Có bất kỳ vấn đề / thuật toán nổi tiếng nào trong điện toán khoa học không thể được tăng tốc bằng cách song song hóa không? Dường như với tôi trong khi đọc sách về CUDA rằng hầu hết mọi thứ đều có thể.
Câu trả lời:
Vấn đề trọng tâm là chiều dài của con đường quan trọng so với tổng số tiền tính toán T . Nếu C tỷ lệ thuận với T , thì song song cung cấp tối đa tốc độ không đổi. Nếu C nhỏ hơn tiệm cận so với T , có chỗ cho sự song song hơn khi kích thước bài toán tăng. Đối với các thuật toán trong đó T là đa thức ở kích thước đầu vào N , trường hợp tốt nhất là C ∼ log T vì rất ít đại lượng hữu ích có thể được tính trong thời gian ngắn hơn thời gian logarit.
Lớp phức tạp NC đặc trưng cho những vấn đề có thể được giải quyết song song một cách hiệu quả (nghĩa là trong thời gian đa bội). Không biết liệu , nhưng nó được giả thuyết rộng rãi là sai. Nếu đây thực sự là trường hợp, thì P-đầy đủ đặc trưng cho những vấn đề "vốn có tuần tự" và không thể được tăng tốc đáng kể bằng cách song song.
Để đưa ra một khía cạnh lý thuyết cho điều này, được định nghĩa là lớp phức tạp có thể giải được trong thời gian trên một hệ thống có bộ xử lý song song O ( n k ) . Vẫn chưa biết liệu (mặc dù hầu hết mọi người nghi ngờ là không) trong đó P là tập hợp các vấn đề có thể giải quyết được trong thời gian đa thức. Các vấn đề "khó nhất" để song song hóa được gọi làcác vấn đề P -complete theo nghĩa là mọi vấn đề trong P có thể được giảm xuốngthành vấn đề P -complete thông quaGiảm N C. Nếu bạn chỉ ra rằng mộtvấn đề P -completeduy nhấtnằm ở N C , bạn chứng minh rằng P = N C (mặc dù điều đó có thể sai như đã đề cập ở trên).
Vì vậy, bất kỳ vấn đề nào là -complete sẽ khó có thể song song hóa (mặc dù vẫn có thể tăng tốc lớn). Một vấn đề P -complete mà chúng tôi không có tốc độ tăng yếu tố liên tục rất tốt là Lập trình tuyến tính (xem nhận xét này về trao đổi OR).
Bắt đầu bằng cách lách luật của Amdahl . Về cơ bản bất cứ điều gì với một số lượng lớn các bước nối tiếp sẽ được hưởng lợi không đáng kể từ sự song song. Một vài ví dụ bao gồm phân tích cú pháp, regex và nén hầu hết tỷ lệ cao.
Bên cạnh đó, vấn đề chính thường là một nút cổ chai trong băng thông bộ nhớ. Đặc biệt với hầu hết các GPU của flop lý thuyết của bạn vượt xa số lượng số dấu phẩy động bạn có thể nhận được cho ALU của mình, vì các thuật toán với cường độ số học thấp (flops / cache-miss) sẽ dành phần lớn thời gian chờ đợi trên RAM.
Cuối cùng, bất cứ khi nào một đoạn mã yêu cầu phân nhánh, không có khả năng có được hiệu năng tốt, vì logic của ALU thường vượt trội hơn.
Tóm lại, một ví dụ thực sự đơn giản về thứ gì đó khó có thể đạt được tốc độ tăng từ GPU chỉ đơn giản là đếm số không trong một số nguyên, vì bạn có thể phải phân nhánh thường xuyên, nhiều nhất là thực hiện 1 thao tác (tăng theo một) trong trường hợp bạn tìm thấy số 0 và tạo ít nhất một bộ nhớ cho mỗi thao tác.
Một ví dụ miễn phí cho vấn đề phân nhánh là tính toán một vectơ là tổng tích lũy của một vectơ khác. ([1,2,1] -> [1,3,4])
Tôi không biết nếu những điều này được coi là "nổi tiếng" nhưng chắc chắn có một số lượng lớn các vấn đề mà điện toán song song sẽ không giúp bạn.
Phương pháp diễu hành nhanh (nổi tiếng) để giải phương trình Eikonal có thể được tăng tốc bằng cách song song hóa. Có các phương pháp khác (ví dụ như các phương pháp quét nhanh) để giải phương trình Eikonal dễ điều chỉnh song song hơn, nhưng ngay cả ở đây, khả năng tăng tốc (song song) bị hạn chế.
Vấn đề với phương trình Eikonal là luồng thông tin phụ thuộc vào chính giải pháp. Nói một cách lỏng lẻo, thông tin chảy dọc theo các đặc tính (tức là các tia sáng trong quang học), nhưng các đặc tính phụ thuộc vào chính giải pháp. Và luồng thông tin cho phương trình Eikonal rời rạc thậm chí còn tồi tệ hơn, đòi hỏi các xấp xỉ bổ sung (như hiện diện ngầm trong các phương pháp quét nhanh) nếu muốn tăng tốc độ song song.
Để thấy những khó khăn cho việc song song hóa, hãy tưởng tượng một mê cung đẹp như trong một số ví dụ trên trang web của Sethian . Số lượng ô trên đường đi ngắn nhất qua mê cung (có thể) là giới hạn dưới cho số bước / lần lặp tối thiểu của bất kỳ thuật toán (song song) nào giải quyết vấn đề tương ứng.
(Tôi viết "(có lẽ) là", bởi vì giới hạn dưới rất khó chứng minh và thường yêu cầu một số giả định hợp lý về các hoạt động được sử dụng bởi một thuật toán.)
Một loại vấn đề khác khó có thể song song trong thực tế là các vấn đề nhạy cảm với các lỗi làm tròn, trong đó độ ổn định số đạt được bằng cách tuần tự hóa.
Ví dụ, xem xét quá trình Gram Gram Schmidt và sửa đổi nối tiếp của nó. Thuật toán hoạt động với các vectơ, vì vậy bạn có thể sử dụng các phép toán vectơ song song, nhưng điều đó không mở rộng tốt. Nếu số lượng vectơ lớn và kích thước vectơ nhỏ, sử dụng song song cổ điển GramTHER Schmidt và tái cấu trúc hóa có thể ổn định và nhanh hơn so với Gram Gram Schmidt đã sửa đổi, mặc dù nó liên quan đến việc thực hiện nhiều lần hơn.