Существуют ли простые решения для распределения вычислительной работы в .NET? - PullRequest
17 голосов
/ 10 января 2011

Допустим, у меня дома есть несколько компьютеров.

Допустим, у меня есть какой-то алгоритм, который я хочу запустить, и на его решение обычно требуется много времени.Его можно разделить на количество частей, которые я хочу, чтобы я мог запустить часть этого на одном компьютере, часть на другом и т. Д., И в конце мне просто нужно объединить результаты на одном из компьютеров.

Мой вопрос заключается в том, есть ли в .NET простой и прямой способ использования нескольких компьютеров для выполнения такого рода вычислений.Если да, то как это называется?Я не имею в виду необходимость кодировать весь код IPC самостоятельно, что-то похожее на задачи BCL, но это позволило бы мне посылать «работу» на другие компьютеры, через IP или что-то еще.

Спасибо!

Ответы [ 4 ]

7 голосов
/ 10 января 2011

В общих распределенных вычислениях существует две модели: передача сообщений и общая память

Звучит так, будто вы заинтересованы в передаче сообщений, потому что обычно в ней участвуют несколько компьютеров, которые общаются по сети. Общая память использует систему памяти для связи между процессами. Из моего (ограниченного) опыта в распределенных вычислениях почти каждый, кто использует передачу сообщений в качестве своей модели, перешел на MPI. MPI - это фреймворк, реализованный на многих языках. Есть несколько довольно сильных реализаций .NET MPI.

Весь этот пост предполагает, что вы выполняете «распределенные вычисления» в сценарии HPC. В таком случае у вас будет много мощных компьютеров, подключенных через сеть связи, в серверной комнате (или аналогичной). Если вы ищете какие-то распределенные вычисления между отдельными физическими машинами (например, fold @ home), вам нужно найти что-то еще или найти собственное решение. Поэтому, как упоминает в своем ответе Лениэль Макафери, вам необходимо убедиться, что в вашем центре обработки данных установлена ​​какая-то версия Microsoft HPC Server. Большинство кластеров HPC работают под управлением Linux, что, очевидно, не позволит вам развернуть решение на основе .NET.

3 голосов
/ 10 января 2011

Это идеальный вариант для Microsoft HPC Server дистрибутив, поскольку он специально настроен для решения подобных ситуаций.

Я не знаю ничего, что могло бы сделать это исключительно на основе .NET. Это возможно, конечно, но это потребует некоторого кодирования.

Хотя это и не то, что вам нужно, я рекомендую вам прочитать о .NET параллельной библиотеке задач , которая помогает автоматически и безболезненно распределить рабочую нагрузку между доступными процессорами (ядрами) компьютера.

Интересные статьи, связанные с распределенными вычислениями:

C # Remoting и распределенные вычисления

Легион: создайте свой собственный виртуальный супер компьютер с Silverlight

Windows Communication Foundation (WCF)

1 голос
/ 10 января 2011

Microsoft имеет в своих исследовательских лабораториях реализацию Map Link под названием Dryad Linq (в настоящее время бета-версия доступна только на серверах HPC), но это выглядит очень интересно и делает то, что вы ищете.

0 голосов
/ 24 апреля 2013

Microsoft HPC Server требует серверной ОС. Судя по всему, вы не используете серверную ОС. Предполагая, что вы используете настольную версию Windows с установленным .NET 4.0, вы можете попробовать один из следующих вариантов:

  1. Вы можете вручную разбить работу и выполнить части вручную.

  2. Вы можете использовать что-то MPAPI и кодировать свои собственные узлы и работников.

  3. Вы можете написать консольное приложение и использовать DuoVia.MpiVisor для распространения и выполнения на своих рабочих станциях. (Полное раскрытие: я автор MpiVisor)

Выполнение распределенных вычислений случайным образом без большой суеты не так просто, как может показаться, но любой из этих двух вариантов должен помочь вам.

...