2012-06-19 25 views
33

Tôi đã thực hiện rất nhiều nghiên cứu về Data Parallel Haskell và tìm thấy hai loại mảng song song riêng biệt. Loại [::] dường như hiển thị nhiều hơn trong các tài liệu nghiên cứu và có vẻ là loại lý tưởng, nhưng PArray dường như bị kẹt ở mọi nơi. Trang wiki về chủ đề làm cho nó rất rõ ràng rằng các mảng kiểu [::] không thể được chuyển tới mã chưa được kiểm duyệt. Tại sao? Tại sao có loại PArray trung gian này? Nó có vẻ hoàn toàn không cần thiết với tôi. Wiki gọi nó là "mảng phẳng", nhưng toàn bộ điểm vector hóa là tạo các mảng song song bằng phẳng.Sự khác nhau giữa PArray và [::] trong Data Parallel Haskell là gì?

Cập nhật: Sau khi đọc thêm tài liệu và tài liệu và mã nguồn, tôi thậm chí còn bối rối hơn. [::] hoặc từ đồng nghĩa PArr dường như được thực hiện trong GHC.PArr dưới dạng mảng phẳng, trong khi PArray, loại trung gian được gọi là "phẳng" ở nhiều nơi, được triển khai trong Data.Array.Parallel.PArray.Base và các mô-đun khác được nhập từ đó dưới dạng họ dữ liệu chuyển đổi được mô tả trong rất nhiều các giấy tờ tôi đọc. Tại sao các mảng phẳng không bằng phẳng và các mảng phẳng phẳng?

Cập nhật 2: Sau khi nghiên cứu thêm, tôi đã thấy rằng việc xử lý là một mớ hỗn độn hoàn chỉnh. Trang wiki hasn't had any content updates trong gần một năm, mâu thuẫn với tài liệu về hackage (xem Data.Array.Parallel.Prelude, ở đây nó nói rõ ràng là không nhập khẩu phần mở đầu đặc biệt), và chỉ nói chung là lỗi thời. GHC Trac page cũng đã lỗi thời, bao gồm, ví dụ, hướng dẫn cho các gói DPH đề cập đến các gói, ít nhất là tới mức có liên quan đến Hackage (tôi không có, và không hoàn toàn không tìm nơi nào khác), không tồn tại và không đề cập đến các gói như dph-lifting-vseg.

Trên một lưu ý tốt hơn, tôi tin rằng bây giờ tôi hiểu được những câu trả lời cho bản cập nhật đầu tiên, ám chỉ bởi phần này của các ý kiến ​​trong GHC.PArr:

-- BIG UGLY HACK: The desugarer special cases this module. Despite the uses of '-XParallelArrays', 
--    the desugarer does not load 'Data.Array.Parallel' into its global state. (Hence, 
--    the present module may not use any other piece of '-XParallelArray' syntax.) 
-- 
--    This will be cleaned up when we change the internal represention of '[::]' to not 
--    rely on a wired-in type constructor. 

Đó là tôi đoán rằng, khi vector hóa được kích hoạt, mô-đun đó sẽ tự động được thay thế bằng một biểu diễn khác sử dụng phép biến đổi dẹt. Điều này thậm chí có thể giống như

type [::] = PArray 

, giải quyết vấn đề ban đầu của tôi. Tuy nhiên, không chỉ điểm thứ hai không có ý nghĩa nhiều (tại sao hạn chế [::] thành một loại mảng phẳng khi vector hóa bị tắt?), Nhưng tôi không tìm thấy bằng chứng nào để hỗ trợ lý thuyết bên cạnh chú thích được đề cập ở trên. Có vẻ như cách đáng tin cậy duy nhất để học bất cứ điều gì là nhìn vào nguồn GHC, với kích thước và độ phức tạp của nó, là điều mà tôi mong muốn làm, ngay cả khi tôi chắc chắn mình sẽ thành công.

Trả lời

Các vấn đề liên quan