2011-09-30 14 views
5

Tôi đã sử dụng MPI để viết một lớp phân phối. Giả sử chúng ta có n nguồn dữ liệu và k của người tiêu dùng dữ liệu. Theo cách tiếp cận của tôi, mỗi quy trình MPI đọc dữ liệu, sau đó phân phối nó cho một (hoặc nhiều) người dùng dữ liệu k (các quy trình MPI khác) theo cách thức (logic).Lớp phân phối MPI

Vì vậy, nó có vẻ là rất chung chung và câu hỏi của tôi là có một cái gì đó như thế đã được thực hiện?

Có vẻ như đơn giản, nhưng nó có thể rất phức tạp. Giả sử rằng phân phối kiểm tra xem dữ liệu nào của người tiêu dùng đã sẵn sàng để làm việc (phân phối công việc động). Nó có thể phân phối dữ liệu theo thuật toán đã cho dựa trên dữ liệu. Có rất nhiều khả năng và tôi như mọi người chúng ta không muốn phát minh lại bánh xe.

Trả lời

1

Theo như tôi biết, không có triển khai chung cho nó, ngoài API MPI. Bạn nên sử dụng các hàm chính xác theo các ràng buộc của vấn đề.

Nếu những gì bạn đang cố gắng xây dựng hàng đợi công việc/dữ liệu n-nhà sản xuất và người tiêu dùng n đơn giản, thì tất nhiên đã có nhiều triển khai ngoài đó (chỉ cần google và bạn sẽ nhận được một vài) . Tuy nhiên, cách bạn trình bày nó có vẻ rất chung chung - đôi khi bạn muốn dữ liệu chỉ được gửi đến một người tiêu dùng, đôi khi cho tất cả người dùng, v.v. Trong trường hợp đó, bạn nên tìm ra điều bạn muốn và khi nào, và sử dụng các chức năng giao tiếp điểm-điểm, hoặc các chức năng giao tiếp tập thể, và tất nhiên mọi người phải biết điều gì sẽ xảy ra - bạn không thể có người tiêu dùng chờ dữ liệu từ một nguồn, trong khi nhà sản xuất muốn phát dữ liệu...). Tất cả những điều đó sang một bên, đây là một trong những thực hiện mà đến với tâm trí mà dường như để trả lời tất cả các yêu cầu của bạn:
Thực hiện một hàng đợi đồng bộ, nhà sản xuất đẩy dữ liệu ở một đầu, người tiêu dùng lấy nó từ bên kia (quyết định tất cả các loại của các hành vi cho hàng đợi khi bạn cần - là kích thước hàng đợi có giới hạn, không thêm phần tử vào một khối hàng đợi đầy đủ hay không, loại bỏ một phần tử khỏi một khối hàng đợi rỗng hoặc không thành công, v.v.).
Giả sử dữ liệu chứa một số cờ cho người tiêu dùng biết nếu dữ liệu này dành cho tất cả mọi người hoặc chỉ cho một trong số họ, người tiêu dùng nhìn trộm và xóa phần tử hoặc để nguyên và lưu ý rằng họ đã làm điều đó id của nó tại địa phương, hoặc bằng cách thay đổi một lá cờ trong chính dữ liệu).
Nếu bạn không muốn một phần dữ liệu tập thể chặn cho đến khi mọi người xử lý, bạn có thể sử dụng 2 hàng đợi, một hàng cho mỗi loại dữ liệu và người tiêu dùng sẽ lấy dữ liệu từ một trong các hàng đợi tại một thời điểm (hoặc bằng cách chọn một hàng đợi khác nhau mỗi lần, chọn ngẫu nhiên một hàng đợi, ưu tiên một trong các hàng đợi hoặc theo một số thứ tự được chấp nhận được khấu trừ từ dữ liệu (ví dụ: id thấp nhất trước)).

Xin lỗi vì câu trả lời dài và tôi hy vọng điều này sẽ giúp ích cho bạn :)

+0

Dường như tôi sẽ tự mình làm điều đó. Có rất nhiều vấn đề liên quan đến hiệu suất và chức năng. Nó sẽ không dễ dàng, mặc dù nó sẽ là thử thách;) – kokosing