2013-05-01 7 views
1

В настоящее время я выполняю некоторые интенсивные вычисления, но они занимают много времени. Я уже разделил рабочую нагрузку на все доступные физические ядра в моем процессоре. Мне интересно, как продолжить разделение рабочей нагрузки и присвоить ее другим компьютерам. Я собираюсь купить пару серверов Xeon и использовать их для хруста.Использование нескольких компьютеров для свертывания чисел

Одна большая проблема у меня есть то, что я в настоящее время запуска программы в Visual Studio (CtrlF5), поскольку есть два метода, которые я постоянно делаем небольшие изменения.

Любые предложения о том, как/если можно назначить рабочую нагрузку другим компьютерам/если возможно еще запустить программу с помощью VS или мне нужно будет создавать * .exe каждый раз, когда я захочу ее запустить?

ответ

1

Это зависит от проблемы, которую вы решаете.

Вы можете использовать карту/сокращение и Hadoop, если это легко распараллеливать, например SETI @ Home.

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

+0

Я считаю, что его легко распараллеливать. Рабочая нагрузка может быть разделена на отдельные блоки. Кто-то предложил WCF, но потом я считаю, что все еще есть проблема, что мне нужно будет создать * .exe, установить его на каждом сервере, прежде чем я смогу запустить его. Любые изменения, которые мне нужно сделать для этих двух методов, потребуют нового * .exe и повторной установки их на серверах. (Это предполагает, что я ничего не понял) –

+1

Я бы заглянул в Hadoop и HDInsight: http://cloud.dzone.com/articles/hdinsight-writing-hadoop-map – duffymo

+0

Я проверю это, спасибо за ссылку! –

0

Не является ли суть вашей проблемы в этом утверждении «Одна большая проблема, с которой я сталкиваюсь, заключается в том, что im в настоящее время запускает программу в Visual Studio (Ctrl F5), поскольку существует два метода, которые im постоянно вносят небольшие изменения». ?

Это «одна большая проблема», потому что если вы распространяете то, вы не можете позволить себе модифицировать код на всех узлах при выполнении задания, чтобы вы подумали о чем-то, распространяющем его для вас? Если это так, я предполагаю, что вы уже знаете, как разделить алгоритм или данные таким образом, чтобы узлы могли принимать мелкие части задания.

Если это так - извините, если я неправильно понял - затем внесите часть, которую вы «постоянно вносите небольшие изменения», в файл или базу данных, закодированную в какой-то простой или более сложной форме, в зависимости от того, что вы меняете, чтобы вы не нужно постоянно менять ваши узлы. Разверните код на всех узлах, подключите их к БД или файлу, который содержит различный бит, и наслаждайтесь новым Ferrari!

+0

Обычно я запускаю симуляцию. Как только закончите, что обычно составляет несколько часов, я изменяю пару методов, а затем повторно запускаю их. Или иногда я понимаю, что ive завинчивается, останавливает его, делает некоторые быстрые изменения, а затем повторно запускает его. –

0

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

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

strComputer = "acomputer" 
strCommandLine = "calc.exe" 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set objProcess = objWMIService.Get("Win32_Process") 

intReturnValue = objProcess.Create(strCommandLine, , , intPID) 
WScript.Echo "Process ID: " & intPID 

Вы можете также использовать PsExec from SysInternals для обработки все детали этой работы.

После создания exe в Visual Studio вы можете запустить его на своем локальном компьютере, чтобы убедиться, что он делает то, что вы хотите, а затем, когда вы будете готовы запустить его на удаленных системах, вы можете выполнить пакетный скрипт, подобный выше VBS для запуска exe на удаленных системах.

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

Возможно, вы также захотите включить удаленный переключатель «kill». Вы можете использовать PsKill from SysInternals, или если вы хотите более грациозное завершение работы, что-то простое, как наличие определенного файла в том же каталоге, что и exe, может служить флагом для удаленных процессов, чтобы закрыться.

Вы также можете рассмотреть возможность добавления поддержки клиента CSScript, чтобы удаленные клиентские программы были статическими и загружали и скомпилировали файл CSScript для выполнения этой работы. Это может быть полезно, если вы столкнулись с какой-то трудностью при частом повторном развертывании и перезапуске клиентских программ, или если вам нужно, чтобы они были немного разными (вы можете написать программу для генерации отдельных файлов сценариев для каждого клиента, например).

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

  • Нет связанных вопросов^_^