2012-01-26 2 views
6

Я ищу некоторое руководство с помощью C# и параллельного программирования. Я знаю, что MPI .NET существует, и OpenMP не поддерживается. Мой вопрос: есть ли какая-нибудь другая библиотека (TPL?) Или функция, которая может выполнять функциональные возможности, предоставляемые OpenMP? Я буду работать (надеюсь,!) С последней версией mono (C# .NET 4.0). Код будет работать на Cray XT6M, поэтому использование ресурсов по одному на каждой плате и на узле будет иметь важное значение. Спасибо за ваше время!C# HPC - MPI и OpenMP

+0

.NET 4 поддерживают параллельное программирование. Вам не нравится, как Microsoft справляется с параллельными задачами?! – amrfaissal

+2

Да ... когда у вас есть 1248 ядер, просто вызывающих пару потоков, это не режет. Спасибо за попытку. – Volvox

+0

Ну, с честью, часть вопроса задавала вопрос о OpenMP, и в C# есть несколько вариантов потоков. Однако для материала с распределенной памятью я не знаю - MPI.NET выглядит так, как будто он был оставлен в конце 2008 года, и я не уверен, какие другие варианты существуют на аналогичном уровне промежуточного уровня. Почти наверняка ничего не будет настроено для соединения Seastar +. –

ответ

4

Вы можете взглянуть на Dryad, параллельный подход к программированию Microsoft, где C# на самом деле является гражданином первого класса. По-видимому, Microsoft использует его для Bing и тренирует алгоритмы отслеживания тела для Kinect [2]. Он использует более крупнозернистый параллелизм данных, чем OpenMP. Это больше похоже на процессы с каналами, чем потоки с разделяемой памятью.

Я боюсь, что настройка его на систему Mono/Linux/Cray, вероятно, будет трудно сказать по меньшей мере. Тем не менее, C# не является вашим типичным языком HPC. Как правило, очень сложно эффективно запускать C# в этой шкале/типе системы. Я бы рекомендовал оценить перенос вашего программного обеспечения на язык HPC «первого класса», например. C, Fortran.

Также как примечание: OpenMP не масштабируется на полной машине Cray XT6M (или любой кластер HPC, если на то пошло), вы можете использовать эту форму параллелизма (разделяемую память). Для связи между узлами вам нужна другая форма параллелизма, обычно MPI. Вы также можете использовать MPI в узле.

+0

Спасибо, это выглядит интересно. Я завершил проект на C с использованием гибридного MPI/OMP. Оглядываясь назад, C# может работать в такой среде и может иметь преимущества, поскольку Dryad и подобные проекты продвигаются вперед, но контроль и скорость C или Fortran слишком важны для передачи в программе HPC. – Volvox

+0

Я действительно не осознавал возраст этого вопроса. Я рад, что вы смогли затеять проект! – Zulan

1

C# - прекрасный язык для многих вещей, но сам по себе он не будет в полной мере использовать этот Cray. Разработчики из Microsoft оптимизируют библиотеки для дюжины ядер или меньше, и, скорее всего, разработчики Xamarin больше беспокоятся о сотовых телефонах. Вы хотите использовать MPI или другой параллельный язык программирования под вами. Вы можете сделать это с помощью C# и нескольких других языков (python также популярен в мире HPC), но ключ сидит поверх правильных библиотек. TPL не будет сокращать его в этом масштабе параллелизма.

Смежные вопросы