下面我的帖子(我认为这有点不公平)在 StackOverflow 上被关闭了,因此我在这里重新发布。
原始问题:如何使用多台计算机来创建更快的环境?我有大约 12 台计算机,每台 4GB,每台 2GHz。我需要运行一些耗时的数据转换,并希望使用这些机器的综合能力。它们都运行 Win2003 服务器。
基本上,我们需要转换大量视频文件,以便我们的分析师进行分析。我无法向您透露有关该项目的更多信息,因此问题变得复杂。
答案1
你问的问题正是当今计算领域一个主要问题的关键。单个处理核心的速度不会更快,所以我们需要程序员开始编写代码,将大问题分解成可以在多台计算机上并行处理的小问题。
简短回答:如果您的处理软件允许您拆分作业并并行运行,那么就这样做。如果不允许,那么请与编写该软件的人讨论,让他们重新设计软件,使其以更并行的方式运行。
将数据发送到各个计算机、启动并行任务、确保作业实际完成以及将数据返回的机制,是其他发帖者提到的集群管理软件所做的大部分工作。是涉及一些不小的问题,但总体而言,集群管理软件涉及作业调度和资源管理。集群管理软件并不处理实际的并行工作——这是你的“处理软件”必须做的事情。
没有什么“魔法”可以让你对一组多台计算机施展魔法,让它们“像”一台更快的机器一样运行。如果没有专为充分利用多处理器而设计的软件,你就无法摆脱这种困境。
答案2
为了整合多台机器的处理能力,您需要运行某种集群软件,通常称为计算或计算集群。可以执行此操作的一些应用程序示例包括:
然而,这些都是复杂的软件,创建一个可用的高性能集群是一项复杂且可能昂贵的工作,不应轻率地进行。您还需要可以在集群上运行的特殊软件来完成您的工作。您不能简单地将一堆 Windows 计算机连接在一起并神奇地形成一个集群,然后在其上安装一组标准的 Windows 应用程序。
答案3
当您可以说......时,计算机集群运行良好。
我可以让一个人坐在每台电脑前,分别解决一部分问题吗?这样能加快速度吗?换句话说,能把问题分成基本上独立的部分吗?
鉴于您将问题描述为“需要转换大量视频文件”,是的,这将在集群上运行。
微软确实有集群软件,但我对此一无所知。这可能是可行的方法。
可能更简单的是:
指定一台计算机作为主机。其余计算机均为客户端。
将此主控上的所有视频文件放在一个文件夹中。
为每个客户端创建一个共享文件夹,并让每个客户端挂载该共享文件夹。
客户端运行一些 Windows 脚本语言(perl 也可以),它会不时地被唤醒,如果共享文件夹中有内容,则将其重命名为 work_yourfilenamehere 并运行转换。完成后,它会将其重命名为 done_yourfilenamehere。如果没有,只需等待 60 秒左右。
主计算机运行一个脚本,该脚本会查看每个共享文件夹。如果其中没有任何内容,则放入一个要转换的文件。如果其中有一个名为 done_yourfilenamehere 的文件,则将其移动到 done 文件夹。循环直到主文件夹中没有任何内容。
基本上,所有客户端都应该尽可能忙碌,每个客户端都花费他们需要的时间来转换每个文件。
答案4
你的问题的答案取决于大部分关于您用来“转换”这些视频文件的软件,以及它所包含的内容。
Adobe After Effects 有一种称为“网络渲染”的集群模式,但它并不是一个理想的解决方案。(上次我检查时,它涉及将视频渲染到想象序列,然后可能需要将其重新组合成视频供您使用)
这个基本思想就是将电影分成几块,然后让不同的 PC 处理每一块:
应该有一些命令行视频编码工具可以选择仅处理一定范围的帧;这可以自动进行分割。
每个块都可以复制到不同的共享文件夹(同样很容易实现自动化)
您的“农场”中的每台 PC 都将查看这些共享文件夹之一,以查找要转换的源视频。(假设执行转换的软件具有“查看文件夹”的功能,则非常简单,但可能需要为此设置批处理文件/shell 脚本)
如果不知道视频“转换”的性质、您使用的软件或您掌握的脚本/编程水平,那么就无法进一步发表评论。