2010-10-04 73 views
4

有些人可以推荐使用C++进行并行化的方法,这时要处理的数据非常庞大。我一直在阅读关于openMP和英特尔的TBB以用C++进行并行化,但还没有尝试过。这些对于并行数据处理更好?任何其他图书馆/方法?什么是大数据处理推荐的C++并行库

+2

如果数据的类型正确,您可以考虑使用CUDA/GPU。 – 2010-10-04 15:45:29

+2

不一定:当你有很多相对的计算时,GPU计算就会发光,相对较少的数据I/O,因为将数据传输到GPU的成本可能很高。 – 2010-10-04 17:24:57

+0

@Dirk:当你对所有的数据进行相同的操作时,它也会工作得很好,如果每个数据单元都应该遵循它自己的逻辑,那么它将不起作用。 – 2010-10-04 18:56:37

回答

5

“大”和“数据处理”涵盖了很多地方,没有更多信息很难给出明智的答案。

如果数据处理是“令人尴尬的并行” - 如果涉及到做大量和大量完全相互独立的计算 - 那么就会有一百万个事情能够起作用,而这只是一个寻找某种事情的问题匹配您的代码和背景。

如果它不是令人尴尬的并行,但几乎如此 - 计算需要大量的数据,但只是将其提取为数字 - 只有少数几种选择。

如果计算结果比这更紧密 - 需要处理器在大块数据上串联工作,那么您可能会遇到备用数据库 - 编译器的OpenMP功能,如果它可以在单机(也有TBB,但通常用于数字处理的OpenMP更快更容易)或MPI(如果它需要同时使用多台机器)。你提到了C++; Boost有一个非常漂亮的MPI层。

但是考虑使用哪个库进行并行化可能首先考虑错误的结束。在很多情况下,您不一定需要直接处理这些图层。如果数字运算涉及大量的线性代数(例如),那么PLASMA(用于多核机器 - http://icl.cs.utk.edu/plasma/)或支持分布式内存机器的PetSC(例如多台计算机(http://www.mcs.anl.gov/petsc/petsc-as/))是很好的选择,它可以完全隐藏您的并行实施的实际细节。其他类型的技术也有其他库。最好考虑一下你需要做什么样的分析,然后看看现有的工具包是否有你需要的平行化数量。只有当你确定答案时,你才会开始担心如何推出自己的答案。

+0

有趣的观点在这里,感谢您的投入。 – 2010-10-11 12:42:05

5

OpenMP和Intel TBB都用于本地,因为它们有助于编写多线程应用程序。

如果您拥有真正庞大的数据集,您可能需要将负载分散到多台机器上 - 然后像Open MPI这样的库用于MPI并行编程。 Open MPI有一个C++接口,但是现在您也面临一个网络组件以及一些计算机没有的管理问题。

+0

我正在试验openMP作为单台机器上的第一步,会在多台机器上尝试MPI。 – 2010-10-11 12:40:53

3

MPI在单个本地计算机上也很有用。它将跨多个内核/ CPU运行作业,与线程相比,这可能是过度杀毒,这意味着您可以将作业移动到没有更改的群集。大多数MPI实现还优化本地作业,以使用共享内存而不是TCP来进行数据连接。