0

我想知道是否可以在不添加源代码的情况下运行可执行程序,例如在多台计算机上运行任何游戏。当我在 c# 中编程时,我注意到一个 process 方法,它可以让你调用或关闭任何应用程序或进程,我想知道是否有类似 c++ 的东西可以让我将任何可执行文件或游戏的进程转移到其他计算机或服务器最大限度地减少我的计算机的处理器消耗。

谢谢。

4

4 回答 4

1

一切皆有可能,但这需要大量的工作,并且几乎肯定会使您的程序变得非常缓慢(我在这里谈论的是数百万或数十亿的因素)。本质上,您需要确保程序中使用的每一层都允许这样做。因此,您必须重写操作系统才能做到这一点,而且还必须重写它使用的许多库。

为什么?假设您想将实际线程分布在不同的机器上。如果它是实际过程会稍微容易一些,但我会惊讶于许多应用程序都是这样工作的。

首先,您需要同步内存,更具体地说是所有非线程本地存储,这通常意味着“所有内存”,因为并非所有语言都有线程感知内存模型。当然,这可以进行优化,例如缓冲所有内容,直到您遇到“原子”读取或写入,如果您的系统当然有这样的概念。现在你能想象当一个线程必须被锁定/解锁或一个原子变量必须被读取/写入时,每个线程都会阻塞几秒钟以进行同步吗?

接下来是与管理设备相关的问题。假设您需要一个网络连接:哪个设备将启动它,如何选择 ip,...?要无缝解决这个问题,您可能需要一个在所有平台之间共享的虚拟设备。这必须发生在网络设备、文件系统、打印机、监视器……。正如您提到的游戏:这也应该发生在 GPU 上,想象一下这将如何影响仅从 GPU 发送数据或向 GPU 发送数据的性能(提示:即使 16xpci-e 通常已经是瓶颈)。

总之:这是不可行的,如果你想要一个集群应用程序,你必须从头开始将它构建到应用程序中。

于 2012-07-19T15:10:20.730 回答
0

当前的研究状态是研究在单个计算机上跨多个 CPU 内核分配进程工作的实用方法。在这种情况下,这些处理器仍然共享 RAM。这是必不可少的:RAM 延迟以纳秒为单位。

在分布式计算中,远程内存访问可能需要数十甚至数百微秒。分布式算法明确地考虑到了这一点。再多的魔法也无法让它消失:光本身很慢。

于 2012-07-19T16:24:29.413 回答
0

AT&T 贝尔实验室的Plan 9 操作系统以最无缝和透明的方式支持分布式计算。计划 9 旨在将 Unix 将工作分解为互操作小任务的想法,由高度专业化的实用程序执行,“一切都是文件”以及客户端/服务器模型,达到一个全新的水平。它有一个 CPU 服务器的想法,它为功能较弱的网络客户端执行计算。不幸的是,这个想法过于雄心勃勃,远远超出了它的时代,Plan 9 在很大程度上仍然是一个研究项目。不过,它仍在作为开源软件开发。

MOSIX 是另一个分布式操作系统项目,它在多台机器上提供单个进程空间并支持透明的进程迁移。它允许进程在不更改其源代码的情况下变得可迁移,因为所有上下文保存和恢复都是由操作系统内核完成的。MOSIX 模型有多种实现 - MOSIX2、openMosix(自 2008 年起停止使用)和 LinuxPMI(openMosix 项目的延续)。

ScaleMP 是另一种商业单系统映像 (SSI) 实现,主要针对数据处理和高性能计算。它不仅提供集群节点之间的透明迁移,还提供模拟共享内存(称为分布式共享内存)。基本上,它将通过非常快速的网络连接的一堆计算机转换为具有许多 CPU 和大量内存的单个大型 NUMA 机器。

这些都不允许您在 PC 上启动游戏并将其透明地迁移并在网络上的某个位置执行。此外,大多数游戏都是 GPU 密集型的,而不是 CPU 密集型的——大多数游戏甚至还没有利用多核 CPU 的全部计算能力。我们这里有一个 ScaleMP 集群,但它不能很好地运行 Quake...

于 2012-07-20T09:12:02.750 回答
0

我相信你能做的最接近的事情是MapReduce:它是一个范式,希望很快成为官方 boost 库的一部分。但是,我认为您不会希望将其应用于像游戏这样的实时应用程序。

相关问题可能会提供更多答案:https ://stackoverflow.com/questions/2168558/is-there-anything-like-hadoop-in-c

但正如 KillianDS 指出的那样,没有自动的方法可以做到这一点,似乎也没有可行的方法来做到这一点。那么,您要解决的确切问题是什么?

于 2012-07-19T15:20:19.617 回答