1

这确实是一个生物信息学问题,但我会尽可能笼统地说。这是半假设的情况:

假设我可以访问集群甚至云。我想在这个集群/云上运行一些非常具体的程序(准确地说是基因组/转录组程序)。问题是我预计这些程序(Velvet/Oases、Trinity 等)需要大量 RAM,保守地说是 100GB 以上,而我的集群/云上最大的节点只有 32GB。

现在除了切换到基于 MPI/Hadoop 的程序(ABySS 或诸如此类)、编写自己的程序或购买新计算机之外,我还有哪些可行的选择?有没有人尝试过在集群/云的多个节点上使用具有共享内存的分布式操作系统(MOSIX、Kerrighed、...)?虚拟 SMP 怎么样?还有什么?

谢谢你的帮助!

编辑澄清:假设上面提到的程序(Velvet/Oases 和 Trinity)需要一个具有大量 RAM 池的单个系统。简而言之,我正在寻找一种可行的方法将一堆节点“粘贴”到一个虚拟超级节点中,其中单个进程可以访问所有节点的所有 RAM,就像它是一个系统一样。我知道这样的事情可能会对性能产生相当大的影响,但我正在寻找可能的东西,不一定有效。

ps 对不起,如果我的术语让事情变得混乱。我对很多这些都有些陌生。

4

3 回答 3

2

这完全取决于您的应用程序的性质。切换到 Hadoop、MPI、MOSIX 或 VSMP 可能无法解决您的问题,因为当您可以将应用程序划分为并发执行块时,这些技术很有帮助。

现在,如果您的应用程序可划分为并发块,请选择适合您需求的最佳软件技术。否则,建议升级您的硬件。如果您的应用程序选择软件技术:

  1. 数据密集型:试试 Hadoop 或 Dryad 或类似的东西。
  2. 进程密集并在其块之间传递许多消息:尝试 MPI
  3. 包含许多轻量级线程:为您的应用使用 GPGPU。
  4. ……

看看斯坦福大学的RAMCloud 项目。它在某种程度上是相关的。

于 2011-08-25T18:22:51.190 回答
1

您的问题省略了要完成的处理的性质。这是特别重要的。例如,每个对象真的是 100GB,还是 100GB 是由许多更小的对象组成的集合?

尽管如此,为了解决一般性问题,我通常会在内存映射文件中使用 100GB 以上的数据集。如果学习如何进行内存映射,您可能会发现这是一条非常容易走的路。更重要的是,如果数据在一个地方,那么一个简单的组合就是使用 NFS,然后多个系统可以同时访问相同的数据。无论如何,内存映射通常很容易融入现有程序,尤其是与管理网格周围数据块的移动相比。

正如您所注意到的,有诸如 MOSIX 或 MPI 之类的选项,或者您可以查看 memcached 或 memcacheDB,尽管我认为从长远来看这不会很好。在为您的系统排序方面,我建议首先使用内存映射,然后是 MPI、MOSIX 和 memcached。

于 2011-09-25T23:22:07.363 回答
0

无论如何,不​​要使用 MOSIX 来解决这个问题。MOSIX 是一种分配 CPU 密集型线程的系统,当您需要大量协作时,它通常不会很好地执行。无论如何,您都必须使用 MPI 才能使用这个大型数据集。

于 2014-04-03T15:14:36.087 回答