我在下面的帖子(我认为相当不公平)在 StackOverflow 上关闭,因此我在这里重新发布。
原始问题:如何使用多台计算机来创建更快的环境?我有大约 12 台计算机,每台 4GB 和 2GHz。我需要运行一些耗时的数据转换,并希望使用这些机器的综合功能。他们都运行Win2003服务器。
基本上,我们需要转换大量视频文件,以便我们的分析师进行分析。这个问题很复杂,因为我不能告诉你更多关于这个项目的信息。
原始问题:如何使用多台计算机来创建更快的环境?我有大约 12 台计算机,每台 4GB 和 2GHz。我需要运行一些耗时的数据转换,并希望使用这些机器的综合功能。他们都运行Win2003服务器。
基本上,我们需要转换大量视频文件,以便我们的分析师进行分析。这个问题很复杂,因为我不能告诉你更多关于这个项目的信息。
您要问的是当今计算中一个主要问题的症结所在。单个处理核心不会变得更快,因此我们需要程序员开始编写代码,将较大的问题分解为可以在多台计算机上并行处理的较小问题。
给您的简短回答:如果您的处理软件允许您将作业分开并已经并行运行它们,那么就这样做。如果没有,请与编写它的人讨论让他们重新调整它以以更并行的方式工作。
将数据发送到各个计算机、启动并行任务、确保作业实际完成以及将数据带回的机制是其他发布者提到的集群管理软件的大部分功能。涉及一些不平凡的问题,但总的来说集群管理软件是关于作业调度和资源管理的。集群管理软件实际上并没有处理并行工作——这就是你的“处理软件”必须要做的事情。
没有什么“魔法”可以让您对一组多台计算机投入使用,让它们“表现得像”一台速度更快的机器。如果没有为充分利用多个处理器而构建的软件,您将无法摆脱这种困境。
要结合多台机器的处理能力,您需要运行某种集群软件,通常称为计算或计算集群。可以做到这一点的一些应用程序示例是:
然而,这些都是复杂的软件,创建可用的高性能集群是一项复杂且可能昂贵的工作,不应轻率地进行。您还需要可以在集群上运行的特殊软件来完成您的工作。你不能简单地将一堆windows电脑连接在一起,然后神奇地组成一个集群,然后在上面安装一堆标准的windows应用程序。
当您可以说时,一组计算机运行良好...
我可以让某人坐在每台计算机旁并解决部分问题,这会加快速度吗?换句话说,能否将问题拆分成基本独立的块?
鉴于您将问题描述为“要转换的大量视频文件”,是的,这将适用于集群。
微软确实有我一无所知的集群软件。这可能是要走的路。
可能更容易的是:
专用一台计算机作为主机。其余的都是客户。
把你所有的视频文件放在这个master上的一个文件夹中。
为每个客户端创建一个共享文件夹,并让每个客户端安装该共享文件夹。
客户端运行一些 Windows 脚本语言(perl 可以工作),它会经常唤醒,如果共享文件夹中有内容,请将其重命名为 work_yourfilenamehere 并运行您的转换。完成后将其重命名为 done_yourfilenamehere。如果没有,请等待 60 秒左右。
主计算机运行一个在每个共享文件夹中查找的脚本。如果其中没有任何内容,则放置一个要转换的文件。如果他们有一个名为 done_yourfilenamehere 的文件,则将其移动到 done 文件夹。循环直到主文件夹中没有任何内容。
基本上所有的客户端都应该尽可能地忙碌,每个客户端都需要花费他们需要的时间来转换每个文件。
这是可能的,但构建集群需要做大量工作。没有更多信息很难说更多
您的问题的答案很大程度上取决于您用来“转换”这些视频文件的软件,以及这意味着什么。
Adobe After Effects 有一种他们称之为“网络渲染”的集群模式,但这并不是一个理想的解决方案。(上次我检查它涉及将您的视频渲染为想象序列,然后可能需要将其重新组合成视频供您使用)
这个基本想法是将电影分成多个块,并让不同的 PC 处理每个块:
应该有一些命令行视频编码工具可以选择只处理一定范围的帧;这可以自动拆分。
每个块都可以复制到不同的共享文件夹(同样很容易自动化)
您“农场”中的每台 PC 都将查看这些共享文件夹之一以获取要转换的源视频。(很容易假设进行转换的软件具有“监视文件夹”的功能,但可能会为此设置批处理文件/shell脚本)
在不了解视频“转换”的性质、您使用的软件或您可以使用的脚本/编程水平的情况下,将无法进一步评论。
你“创造”的不是“更快的计算机”,而是一个集群。这无非是一组计算机一起使用。
IOW,您要做的是创建一些程序,在您的每台计算机上运行,并执行部分问题。
在您的特定情况下,您有许多文件要转换。如果每个文件都可以独立于其他文件进行转换,那几乎很容易:将它们分布在机器之间,然后将它们全部转换为自己的文件。
正如其他人所说,这取决于您要尝试做什么以及并行执行的简单程度。
Amdahl 定律和 Gustafson 定律描述了当执行分布在更多处理器上时的加速量。
你考虑过Hadoop吗?使用 Hadoop,您可以像使用多台机器一样运行批处理作业。
http://hadoop.apache.org/
地球上大多数最大的计算机都是由许多单独节点组成的大型集群,每个节点通常都是标准服务器。
请参阅http://www.top500.org/,具体按架构分类:http ://www.top500.org/stats/list/33/archtype 。