2011-12-02 30 views
22

Tôi đã đọc rất nhiều bài viết về phân phối Haskell. Nhiều công việc đã được thực hiện nhưng dường như trong lĩnh vực phân phối tính toán. Tôi đã thấy gói remote có vẻ như thực hiện truyền tin nhắn kiểu Erlang nhưng nó là 0,1 và giai đoạn đầu.Trạng thái Haskell được phân phối của nghệ thuật vào năm 2011?

Tôi muốn triển khai hệ thống có nhiều quy trình riêng biệt cung cấp các dịch vụ riêng biệt và được liên kết với nhau bằng một số quy trình chính. Điều này có vẻ là một sự phù hợp tự nhiên cho Erlang, nhưng không phải như vậy cho Haskell. Nhưng tôi thích kiểu an toàn của Haskell.

Có bất kỳ sự chấp nhận gần đây nào về quản lý quy trình kiểu Erlang trong Haskell không?

+3

Như bạn nói, nó có vẻ là một sự phù hợp tự nhiên đối với Erlang - không phải là loại vấn đề Erlang được * thiết kế * cho? Tôi thích Haskell nhiều nhưng điều này nghe có vẻ như một tình huống "công cụ phù hợp với công việc đúng" khá rõ ràng. Tại sao không chỉ sử dụng Erlang? –

+4

Bởi vì có những cân nhắc khác hơn so với đồng thời, và tôi tin rằng Haskell cung cấp lợi ích tốt hơn trong các lĩnh vực này. Những gì tôi đang tìm kiếm là một khuyến nghị về cách tốt nhất để xử lý đồng thời theo định hướng trong Haskell. – Ana

Trả lời

16

Nếu bạn muốn tìm hiểu thêm về gói remote, a.k.a CloudHaskell, hãy xem the paper cũng như số thesis của Jeff Epstein. Nó nhằm mục đích cung cấp chính xác sự trừu tượng diễn viên mà bạn muốn, nhưng như bạn nói nó đang ở giai đoạn đầu. Có thảo luận tích cực về các cải tiến trên parallel-haskell mailing list, vì vậy nếu bạn có nhu cầu cụ thể mà remote không cung cấp, chúng tôi rất vui khi bạn tham gia và giúp chúng tôi quyết định các hướng tương lai của nó.

Nhiều cấp độ trưởng thành hơn nhưng thấp hơn remote là gói haskell-mpi. Nếu bạn dính vào giao diện Simple, thư có thể được gửi có chứa các trường hợp tùy ý Serialize, nhưng tóm tắt vẫn còn cách thấp hơn remote.

Có một số hệ thống thử nghiệm, như được mô tả trong Triển khai Haskell phân phối bộ nhớ cao cấp trong Haskell (Patrick Maier và Phil Trinder, IFL 2011, không thể tìm thấy bản pdf trực tuyến). Nó kết hợp một cách tiếp cận monad-par của song song luồng dữ liệu xác định với một khả năng hạn chế để làm cho các cấu trúc I có thể tuần tự hóa qua mạng. Những kiểu trừu tượng này hứa hẹn thực hiện tính toán phân tán, nhưng vì trọng tâm là tính toán các giá trị thuần túy hơn là cung cấp các quy trình kiểu Erlang, chúng có thể không phù hợp với ứng dụng của bạn.

Ngoài ra, để hoàn thành, tôi nên chỉ ra trang wiki Haskell trên cloud and HPC Haskell, bao gồm những gì tôi mô tả ở đây, cũng như phần phụ trên distributed Haskell, có vẻ như cần làm mới.

+3

Luận văn và giấy cho CloudHaskell sử dụng rất nhiều thuật ngữ và "từ khóa" (tên hàm, kiểu dữ liệu) khác với gói CloudHaskell/remote. Một người nào đó viết một lời giải thích/hướng dẫn mới nhất sẽ được * rất * hữu ích! – amindfv

+1

Rõ ràng CloudHaskell đang được triển khai lại: https://github.com/haskell-distributed/distributed-process – balu

7

Tôi thường có cảm giác rằng IPC và diễn viên là một tính năng vượt bán. Có rất nhiều hệ thống nhắn tin hấp dẫn trên mạng có các liên kết Haskell, ví dụ: MessagePack, 0MQ hoặc Thrift. IMHO điều duy nhất bạn phải thêm là giải quyết đúng các quy trình và quyết định ai/cái gì đang quản lý khả năng địa chỉ này.

Nhân tiện: một số trình lập trình áp dụng ví dụ: 0MQ vào môi trường Erlang của họ, đơn giản bởi vì nó cung cấp khả năng cấu trúc tin nhắn thông qua các nhà môi giới tin nhắn thay vì dựa vào quy trình thuần túy để xử lý tin nhắn ở quy mô siêu.

Trong một "thế giới đa lõi", cá nhân tôi giả định rằng các phương pháp tiếp cận bộ nhớ chia sẻ cuối cùng sẽ hoạt động tốt hơn tin nhắn. Ai đó có thể sau đó luôn luôn đến và tranh luận với sự không đồng bộ của khóa học. Nhưng đã có khi bạn viết rằng bạn muốn "liên kết với nhau" các quy trình của bạn bằng "một số quy trình chính", bạn thực tế nói về đồng bộ hóa. Ngoài ra, bạn có thể tất nhiên challenge cho dù một chức năng, quá trình hoặc luồng là mức độ song song phù hợp.

Tóm lại: Tôi có thể sẽ xem liệu MessagePack hoặc 0MQ có thể phù hợp với nhu cầu của tôi trong Haskell và chăm sóc phần còn lại trong mã của tôi hay không.

+1

Điểm tốt, nhưng tôi muốn thêm rằng bộ nhớ chia sẻ và nhắn tin không cạnh tranh, nhưng các mô hình bổ sung. MPI và OpenMP thường được kết hợp theo những cách chơi theo thế mạnh của từng mô hình. Tôi đang làm việc ngay bây giờ trên một cái gì đó tương tự với các đơn nguyên 'Par', nơi mà bộ nhớ chia sẻ song song chạy tính toán có thể được gửi giữa các nút với thông điệp đi qua. – acfoltzer

+1

Chắc chắn đúng. Tuy nhiên, tôi nghĩ rằng 10G Ethernet trong khi đó là đủ tốt để làm cho phương pháp tiếp cận bộ nhớ chia sẻ khả thi vượt ra ngoài ranh giới của hệ thống vật lý. Xem [RoCe] (http://dl.acm.org/citation.cfm?id=1634475) và [iWARP] (http://en.wikipedia.org/wiki/IWARP). Tôi hy vọng rằng tôi có thể giành được một nhà tài trợ thương mại cho một thử nghiệm. –

+0

Đối với những người trong chúng ta, những người mới mẻ đối với tất cả điều này, bạn có ý gì bởi "phương pháp tiếp cận bộ nhớ chia sẻ"? – jberryman

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