2013-05-01 51 views
1

我目前正在运行一些计算密集型模拟,但它们需要很长时间才能完成。我已经将工作负载分配到了处理器中的所有可用物理内核中。我想知道的是如何进一步分解工作负载并将其分配给其他计算机。我打算购买一对至强服务器,并将它们用于数字处理。使用多台计算机进行数字运算

的一个大问题,我已经是我目前在运行Visual Studio(按CtrlF5)的有两种方法,我正在不断地作出小的修改中的程序。

有关如何将工作负载分配给其他计算机的任何建议/是否仍可以使用VS运行程序,或者每次需要运行它时都需要创建一个* .exe文件?

回答

1

这取决于你正在解决的问题。

如果SETI @ Home等易于并行化,则可以使用map/reduce和Hadoop。

如果不像线性代数那样,可以使用类似MPI的东西。

+0

我相信它很容易并行化。工作量可以分成不连续的块。有人建议WCF,但是我相信我仍然有问题,我需要创建一个* .exe,安装它之前,我可以运行它在每台服务器上。我需要对这两种方法进行的任何更改都需要一个新的* .exe,并将它们重新安装到服务器上。 (这假设我没有missunderstood的东西) – 2013-05-01 14:32:26

+1

我想看看Hadoop和HDInsight:http://cloud.dzone.com/articles/hdinsight-writing-hadoop-map – duffymo 2013-05-01 14:33:18

+0

我检查出来,谢谢你的链接! – 2013-05-01 14:37:37

0

是不是你在这个声明中问题的症结所在“我遇到的一个大问题是,我正在Visual Studio中运行该程序(Ctrl F5),因为有两种方法可以不断进行微小的更改。 ?

它是“一个大问题”,因为如果你分发了,那么你做不到修改所有节点上的代码,所以你考虑为你分配它的东西吗?如果是这种情况,那么我假设你已经知道如何分割算法或数据,以节点可以承担小部分工作的方式。

如果是这种情况 - 对不起,如果我误解了 - 然后将您正在“不断进行小改动”的部分外化为一个文件或以某种简单或更精细的形式编码的数据库,这取决于您正在更改的内容,不需要让节点不断变化。在所有节点上部署代码,将它们连接到包含不同位的数据库或文件,并享受您的新法拉利!

+0

我通常开始模拟。一旦完成,通常是几个小时,我修改了几个方法,然后重新运行它。或者有时候我会意识到,我搞砸了,停下来,做一些快速的改变,然后重新运行它。 – 2013-05-01 14:37:11

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处理所有这些工作的细节。

在Visual Studio中构建exe文件后,您可以在本地机器上运行它以确保它做到了您想要的,然后当您准备在远程系统上启动它时,可以执行类似于高于VBS在远程系统上启动EXE。

您仍然需要提供一些机制来分配工作量,以便每个客户都知道应该处理的问题的哪一部分。您可以在用于启动远程应用程序的命令行中,在exe目录中的配置文件中,在数据库表中提供此信息,或使用客户端连接回的单独的命令和控制类型服务器(尽管采用这种方法,你很快就会走上舞台,学习如何使用现有的解决方案,而不是自己动手)。

您可能还需要包含某种远程'kill switch'。您可以使用PsKill from SysInternals,或者如果您想要更优雅的关机,则可以使用与exe相同的目录中存在的特定文件这样的简单操作作为远程进程关闭标志。

您也可以考虑将CSScript支持添加到客户端,以便远程客户端程序是静态的并加载并编译CSScript文件来完成这项工作。如果您在经常重新部署和重新启动客户端程序时遇到某种困难,或者您需要它们稍有不同(例如,可能会编写一个程序为每个客户端生成单独的脚本文件),这可能会非常有用。

相关问题