3

当要处理的数据很大时,有人可以推荐在 C++ 中并行化的方法。我一直在阅读有关 openMP 和 Intel 用于 C++ 并行化的 TBB,但还没有尝试过它们。其中哪一个更适合并行数据处理?任何其他库/方法?

4

3 回答 3

5

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

如果您有真正庞大的数据集,您可能需要将负载分摊到多台机器上——然后像Open MPI这样的库 就可以使用 MPI 进行并行编程。Open MPI 具有 C++ 接口,但您现在还面临网络组件和一些单台计算机所没有的管理问题。

于 2010-10-04T15:47:26.787 回答
5

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

如果数据处理是“令人尴尬的并行”——​​如果它涉及进行大量彼此完全独立的计算——那么就有一百万种方法可以工作,只需找到与你的代码匹配的东西背景。

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

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

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

于 2010-10-04T17:19:02.427 回答
3

MPI 在单个本地机器上也很有用。它将跨多个内核/CPU 运行作业,虽然与线程相比这可能是矫枉过正,但它确实意味着您可以将作业移动到集群而无需更改。大多数 MPI 实现还优化本地作业以使用共享内存而不是 TCP 进行数据连接。

于 2010-10-04T16:09:35.503 回答