2012-01-26 5 views
6

Tôi đang tìm một số hướng dẫn với C# và lập trình song song. Tôi biết rằng MPI .NET tồn tại và OpenMP không được hỗ trợ. Câu hỏi của tôi sau đó: có một số thư viện khác (TPL?) Hoặc tính năng có thể thực hiện chức năng mà OpenMP cung cấp không? Tôi sẽ làm việc (hy vọng!) Với bản phát hành mới nhất của mono (C# .NET 4.0). Mã sẽ được chạy trên một Cray XT6M, do đó, sử dụng các nguồn lực một mỗi hội đồng quản trị và trên một nút sẽ là quan trọng. Cảm ơn vì đã dành thời gian cho tôi!C# HPC - MPI và OpenMP

+0

.NET 4 hỗ trợ lập trình song song. u không thích cách của microsoft đối phó với các nhiệm vụ song song?! – amrfaissal

+2

Yea ... khi bạn có 1248 lõi đơn giản gọi một vài chủ đề sẽ không cắt nó. Cảm ơn bạn đã thử. – Volvox

+0

Vâng, trong phần công bằng của câu hỏi đã được hỏi về OpenMP, và có một số tùy chọn luồng trong C#. Mặc dù vậy, đối với các bộ nhớ phân tán, tôi không biết - MPI.NET trông giống như nó đã bị bỏ vào cuối năm 2008 và tôi không chắc chắn các tùy chọn khác tồn tại ở mức trung gian tương tự. Hầu như chắc chắn không có gì sẽ được điều chỉnh cho Seastar + kết nối. –

Trả lời

4

Bạn có thể xem Dryad, một cách tiếp cận lập trình song song của Microsoft, nơi C# thực sự là công dân hạng nhất. Rõ ràng Microsoft sử dụng nó cho Bing và đào tạo các thuật toán theo dõi cơ thể cho Kinect [2]. Nó sử dụng dữ liệu song song thô hơn so với OpenMP. Nó giống như các quy trình với đường ống hơn so với các luồng có bộ nhớ dùng chung.

Tôi lo ngại rằng việc thiết lập nó trên hệ thống Mono/Linux/Cray có thể sẽ khó nói ít nhất. Điều đó nói rằng C# không phải là ngôn ngữ HPC điển hình của bạn. Nói chung sẽ rất khó khăn để chạy C# một cách hiệu quả ở quy mô/loại hệ thống này. Tôi khuyên bạn nên đánh giá việc chuyển phần mềm của bạn sang ngôn ngữ HPC "hạng nhất", ví dụ: C, Fortran.

Cũng như lưu ý: OpenMP không mở rộng trên toàn bộ máy Cray XT6M (hoặc bất kỳ cụm HPC nào cho vấn đề đó), bạn có thể sử dụng dạng song song này (bộ nhớ dùng chung). Để giao tiếp giữa các nút, bạn cần một dạng song song khác, thường là MPI. Bạn cũng có thể sử dụng MPI trong một nút.

+0

Cảm ơn, điều này có vẻ thú vị. Tôi đã hoàn thành dự án trong C bằng cách sử dụng lai MPI/OMP. Nhìn lại C# có thể chạy trong môi trường như vậy, và có thể có lợi thế khi Dryad và các dự án tương tự di chuyển về phía trước, nhưng sự kiểm soát và tốc độ của C hoặc Fortran chỉ là quá quan trọng để vượt qua trong một chương trình HPC. – Volvox

+0

Tôi đã không thực sự nhận ra tuổi của câu hỏi này. Tôi vui vì bạn đã có thể soạn thảo dự án! – Zulan

1

C# là một ngôn ngữ tuyệt vời cho nhiều thứ, nhưng theo cách riêng của nó, nó sẽ không tận dụng được lợi thế của Cray đó. Các nhà phát triển tại Microsoft tối ưu hóa các thư viện cho một tá lõi hoặc ít hơn, có khả năng, và các nhà phát triển tại Xamarin lo lắng nhiều hơn về điện thoại di động. Bạn muốn MPI hoặc một ngôn ngữ lập trình song song khác bên dưới bạn. Bạn có thể làm điều đó với C# và một số ngôn ngữ khác (python cũng rất phổ biến trong thế giới HPC), nhưng chìa khóa đang nằm trên đỉnh các thư viện thích hợp. TPL sẽ không cắt nó ở quy mô song song đó.