什么是推荐的大数据处理C ++并行化库

时间:2010-10-04 15:41:14

标签: c++ dataset openmp tbb parallel-processing

有些人可以推荐在C ++中进行并行化的方法,当要执行的数据非常庞大时。我一直在阅读有关openMP和英特尔TBB在C ++中进行并行化的内容,但尚未对它们进行过实验。哪些对并行数据处理更好?还有其他图书馆/方法吗?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:5)

“大”和“数据处理”在这里涵盖了很多,如果没有更多信息,很难给出合理的答案。

如果数据处理是“令人尴尬的并行” - 如果它涉及进行大量和完全独立的计算 - 那么有一百万件事情会起作用,这只是找到匹配的东西的问题你的代码和背景。

如果它不是令人尴尬的并行,但几乎是如此 - 计算需要大量的数据,但只是将其提炼成一小撮数字 - 这些数字较少,但仍然有很多选择。

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

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

答案 2 :(得分:3)

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