2017-08-29 73 views
0

我一直在寻找关于分布式游戏树遍历的this paper,并且(在别人的帮助下)试图制作软件树遍历器的Python/mpi4py克隆,以便解决2个玩家抽象策略游戏。是否有最适合分布式游戏树遍历的文件系统?

首先,Wikipedia provides a breif description关于如何“解决”一个游戏。

这是一个常见的优化,记住已经解决的结果,因此不需要进一步的树遍历。由于一群计算机不能平均分享彼此的结果,因此采取了各种方法来解决这个问题。在纸张上的方法(转换表驱动的工作调度)的工作原理基本上如下:

  1. 给出一个ID给每个计算机1到n(I只是使用的标准MPI等级)
  2. 在任何特定点的计算机可能会收到一个职位。检查该位置是否在查找表中或平凡完成。如果是,则发送结果值,否则,生成子项。
  3. 哈希每个孩子的位置,使他们有1到n的关联值。使用散列的ID将每个位置发送到“正确的”计算机。
  4. 重复,直到初始位置解决。

正如文件甚至提到,这种方法有点矛盾地工作,具有令人难以置信的高通信速率。

这里有问题:

在它似乎很好地工作在一台计算机。然后我在我的学校集群上进行了一些测试,并遇到了一些严重的问题。解决像TicTacToe这样的游戏通常会在“调试模式”(4个节点,20个核心和15分钟的时间限制)中超时。

我将TicTacToe解决方案数据库保存到他们所称的“用户目录”(更多可以是found here)。这与通常用于存储数据的“scratch”目录形成对比。当我这样做时,TicTacToe的数据库在几秒钟内解决了。

我注意到,“从零开始”的空间使用"Lustre FS"这似乎是对“对等网络”的应用一个糟糕的选择:

尽管Lustre文件系统可以在许多工作环境中正常运行,它 不一定是所有应用程序的最佳选择。最好是 适用于超出单个服务器可提供的容量的使用,尽管在某些使用情况下,Lustre文件系统可通过单一服务器比其他文件系统更好地执行 ,这是由于其强大的锁定和数据一致性而导致的 强大的 。

光泽文件系统当前不特别适合于 “对等网络”,其中客户端和服务器上 运行相同的节点的使用模式中,每个共享的存储量小,由于缺乏 在Lustre软件级别进行数据复制。在这种使用中,如果一个客户端/服务器发生故障,那么存储在该节点上的数据将不会是 ,直到该节点重新启动。

我可能对分布式计算没有足够的把握,但似乎Lustre FS可能不会客观地适合这类问题。不幸的是,我使用的群集锁定在使用Lustre FS。另一种选择是像谷歌云引擎或AWS做的任务,但我很困惑的一些问题:

  1. 很多抽象似乎吓倒我。所有这些云平台都提供“可扩展解决方案”,通常涉及“负载均衡”,这不仅是不必要的,而且对算法不利。 (这是必要的位置被发送到正确的电脑,以便他们可以快速查找)。 Google云引擎或AWS是否提供足够的基本骨架来使此算法有效地工作?
  2. 我应该使用什么文件系统? Google云端引擎推荐使用NFS或Gluster,但我不确定。这篇论文相当过时,似乎没有使用任何特别的东西。 AWS或Google Cloud Engine是否为这类任务提供适当的文件系统?

回答

0

没有任何代码也没有描述文件系统是如何使用的,所以很难提供一些有价值的帮助。 无论如何,如果我的行之间,读

  • 你建立一个解决方案
  • 这个“数据库”在文件系统上
  • 添加条目的基础上实现的“数据库”是一个文件创建
  • 查找是一个文件存在检查

我知道了吗?

如果是,那么这不是一个惊喜表现是可怕的,没有规模。 你基本上在问一个并行文件系统它最糟糕的地方:从所有节点访问大量元数据,这涉及引擎盖下的流量以保持文件系统的一致视图。

需要多少数据来存储解决方案?乍一看,将它们存储在旧学校数据库(例如MySQL)中可能会更快一些。

另一种选择是将其存储在本地文件系统中,并让远程节点向存储数据的任务发出查询(创建该文件,该文件是否存在),因此不需要保留跨节点的元数据保持一致。

更好的版本将是让所有节点存储解答和答复查询。您可以散列解决方案并推断其存储在哪个节点上,以便知道应该要求哪些MPI任务存储解决方案或发出查询。

如果您确实需要使用文件系统,那么NFS可能是比光驱,glusterfs或gpfs等并行文件系统更好的选择。