Подтвердить что ты не робот

Существуют ли простые решения для распределения вычислительной работы в .NET?

Итак, скажем, у меня есть компьютеры дома.

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

С# Remoting и Distributed Computing

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

Windows Communication Foundation (WCF)

Ответ 3

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

Ответ 4

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

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

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

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

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