Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多台计算机进行数字运算_C#_Multithreading_Wcf_C# 4.0_Multiprocessing - Fatal编程技术网

C# 使用多台计算机进行数字运算

C# 使用多台计算机进行数字运算,c#,multithreading,wcf,c#-4.0,multiprocessing,C#,Multithreading,Wcf,C# 4.0,Multiprocessing,我目前正在运行一些计算密集型模拟,但它们需要很长时间才能完成。我已经在处理器中的所有可用物理内核上分配了工作负载。我想知道的是如何进一步拆分工作负载并将其分配给其他计算机。我正在考虑购买几台Xeon服务器,并使用它们进行数字运算 我遇到的一个大问题是,我目前正在Visual Studio(Ctrl F5)中运行该程序,因为有两种方法我一直在对它们进行小的更改 关于如何/是否可以将工作负载分配给其他计算机/是否仍然可以使用VS运行该程序,或者每次运行时是否需要创建一个*.exe,有何建议 这取决于

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

我遇到的一个大问题是,我目前正在Visual Studio(Ctrl F5)中运行该程序,因为有两种方法我一直在对它们进行小的更改


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

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

如果map/reduce和Hadoop易于并行化,那么可以使用它们,比如SETI@Home.


如果不是,你可以使用MPI之类的东西,比如线性代数。

这取决于你要解决的问题

如果map/reduce和Hadoop易于并行化,那么可以使用它们,比如SETI@Home.


如果不是的话,你可以使用MPI之类的东西,比如线性代数。

这句话不是你问题的症结所在“我遇到的一个大问题是,我目前正在Visual Studio(Ctrl F5)中运行程序,因为有两种方法我一直在对它们进行小的更改。”

这是“一个大问题”吗?因为如果您分发,那么在执行任务时,您负担不起修改所有节点上的代码,因此您考虑为您分发代码?如果是这种情况,那么我假设您已经知道如何以节点可以承担小部分工作的方式分割算法或数据


如果是这样的话——对不起,如果我误解了你的意思——那么把你正在“不断地做一些小的改变”的部分外部化到一个文件或一个数据库中,根据你正在改变的内容以某种简单或更复杂的形式编码,这样你就不需要不断地改变你的节点。在所有节点上部署代码,将它们连接到包含不同位的DB或文件,享受您的新法拉利

这句话不是你问题的症结所在吗“我的一个大问题是,我目前正在Visual Studio(Ctrl F5)中运行该程序,因为有两种方法我一直在对它们进行小的更改。”

这是“一个大问题”吗?因为如果您分发,那么在执行任务时,您负担不起修改所有节点上的代码,因此您考虑为您分发代码?如果是这种情况,那么我假设您已经知道如何以节点可以承担小部分工作的方式分割算法或数据

如果是这样的话——对不起,如果我误解了你的意思——那么把你正在“不断地做一些小的改变”的部分外部化到一个文件或一个数据库中,根据你正在改变的内容以某种简单或更复杂的形式编码,这样你就不需要不断地改变你的节点。在所有节点上部署代码,将它们连接到包含不同位的DB或文件,享受您的新法拉利

您可以使用启动远程计算机上的进程。您可以将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
您还可以使用来处理执行此操作的所有细节

在Visual Studio中生成exe后,您可以在本地计算机上运行它,以确保它符合您的要求,然后当您准备在远程系统上启动它时,您可以执行类似于上述VBS的批处理脚本,在远程系统上启动exe

您仍然需要提供一些机制来划分工作负载,以便每个客户机都知道应该处理问题的哪一部分。您可以在用于启动远程应用程序的命令行、包含exe的目录中的配置文件、数据库表中提供此信息,或者使用客户端连接回的单独命令和控制类型服务器(尽管使用这种方法,您很快就会进入一个阶段,学习使用现有解决方案会比使用自己的解决方案更好)

您可能还希望包含某种远程“kill开关”。您可以使用,或者如果您希望更优雅地关闭,可以使用一些简单的方法,例如在与exe相同的目录中存在特定文件,作为远程进程关闭自身的标志

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

您可以使用在远程计算机上启动进程。您可以将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
您还可以使用来处理执行此操作的所有细节

在Visual Studio中生成exe后,您可以在本地计算机上运行它,以确保它符合您的要求,然后当您准备在远程系统上启动它时,您可以执行类似于上述VBS的批处理脚本,在远程系统上启动exe

您仍然需要为divid提供一些机制