将处理分配到异构计算节点集群,将相对性能和通信成本考虑在内?

时间:2016-02-08 12:41:38

标签: parallel-processing mapreduce openmp yarn hpc

给定一组真正异构的计算节点,如何才能实现 在考虑到它们的相对性能的同时将处理分配给它们 和他们之间传递消息的成本? (我知道优化这是一般的NP完全) 哪个并发平台目前最好支持这个?

您可以将问题重新整理/概括为:

哪种算法能够最有效地利用cpu,内存和通信资源进行理论上的分布式计算,以及现有(开源)平台最接近实现这一点的方法? 显然,这在某种程度上取决于工作量,因此理解权衡是至关重要的。

一些背景

我发现一些关于S / O想要了解背景的人,所以他们可以提供更具体的答案,所以我已经包含了相当多的内容,但它对问题的本质没有必要。

我看到的典型情况是:

我们有一个在X节点上运行的应用程序 每个都有Y核心。所以我们从同类群开始。 运营团队经常购买一台或多台新服务器。 新服务器速度更快,可能拥有更多内核。 它们被集成到集群中以使事情运行得更快。 某些旧服务器可能会被重新使用,但新群集现在包含具有不同性能特征的计算机。 群集不再是同质的,但整体计算能力更强。 我相信这种情况在大型云数据中心也必须是标准的。 它如何最好地利用我真正感兴趣的基础架构中的这种变化。

在一个应用程序中,我将工作分为若干相对较长的任务。任务分配给逻辑处理器(我们通常每个核心有一个) 可用。虽然执行核心的任务通常不是空闲的但是 在大多数情况下,这些工作可归类为"令人难以置信的可扩展性"。

这个特殊的应用程序目前是C ++,它使用ssh和nfs来完成大型任务。 我正在考虑各种替代方法的论点。 有些人喜欢各种hadoop mad / reduce选项。我想知道它们如何形成与更多面向C ++ /机器的方法,如openMP,Cilk ++。我对这个具体案例的答案比利弊更感兴趣。

任务模型本身似乎可扩展且明智,独立于平台。 所以,我假设一个模型,你将工作划分为任务,并且(可能是分布式的)调度程序试图决定分配每个任务的处理器。我愿意接受替代方案。 每个节点可能有任务队列,可能每个处理器和空闲处理器都应该允许工作窃取(例如,来自长队列的处理器)。

但是,当我看到高性能和云集群计算的各种模型时,我不会看到这么多讨论。

迈克尔·黄将并行性,无视hadoop分为两个主要阵营(从大约14分钟开始)。 https://isocpp.org/blog/2016/01/the-landscape-of-parallelism-michael-wong-meetingcpp-2015 HPC和工业中的多线程应用程序

HPC社区似乎更喜欢在相同节点的群集上使用openMP。 如果每个节点都支持CUDA或支持FPGA,但每个节点趋于相同,则这可能仍然是异构的。 如果是这样的话,他们是在大爆炸中升级他们的数据中心还是什么? (例如,超级计算机1 = 100个x型节点。超级计算机v2.0位于不同的站点上 y)类型的200个节点。

OpenMP本身仅支持单个物理计算机。 HPC社区使用MPI(我认为太低级别)或通过从所有节点创建虚拟机来解决这个问题 使用像scaleMP或vNUMA这样的虚拟机管理程序(参见例如 - OpenMP program on different hosts)。 (有人知道一个好的开源虚拟机管理程序吗?) 我相信这些仍被认为是世界上最强大的计算系统。

我发现这令人惊讶,因为我不知道是什么阻止了地图/减少人们更容易创建更大的群集 这总体上效率低得多,但由于使用的核心总数而赢得蛮力?

那么哪些其他并发平台支持具有广泛变化特征的真正异构节点,以及它们如何处理性能不匹配(以及类似的数据分布)?

我将MPI作为一个选项排除,因为强大的它太低级了。你不妨说使用套接字。建立在MPI上的框架是可以接受的(X10是否以这种方式工作?)。

从用户的角度来看map / reduce 方法似乎是添加足够的节点,它并不重要,不担心以最高效率使用它们。 实际上,这些细节在实施过程中保留在引擎盖下 调度程序和分布式文件系统。 计算和消息传递的成本如何/在哪里考虑?

在openMP(或你最喜欢的并发平台)中有什么办法吗? 有效利用该节点的速度是该节点的N倍和数据传输速率的信息 到这个节点或从这个节点平均X Mb / s?

在YARN中,您拥有显着的资源公平性:  http://blog.cloudera.com/blog/2013/12/managing-multiple-resources-in-hadoop-2-with-yarn/  http://static.usenix.org/event/nsdi11/tech/full_papers/Ghodsi.pdf 这包括使用Linux控制组的内存和内核,但它还没有 覆盖磁盘和网络I / O资源。

在其他并发平台中是否有相同或更好的方法?他们如何与DRF比较?

哪种并发平台最能处理这个问题?为什么? 是否有任何流行的可能是进化的死胡同? OpenMP通过积极的蓬勃发展让我感到惊讶。像Cilk ++这样的东西可以用这种方式扩展吗?

提前道歉,将多个博士论文的价值问题合二为一。 我基本上都在寻找有关如何进一步阅读的提示 并建议进一步调查哪些平台(从程序员的角度来看)。 一些调查和/或链接到论文或文章的平台的一个很好的总结就足以作为一个有用的答案。

0 个答案:

没有答案