英特尔TBB与CilkPlus

时间:2013-10-08 08:07:00

标签: c++ gcc intel tbb cilk-plus

我正在开发针对英特尔x86_64机器的C ++中需要时间要求的模拟。 经过一番研究后,我找到了两个有趣的库来实现并行化:

正如文档中所述,它们都针对多核处理器的并行性,但仍然没有考虑哪一个是最好的。 AFAIK Cilkplus简单地实现了三个关键字,以实现更轻松的并行性(这会导致重新编译GCC以支持这些关键字);而TBB只是一个促进更好的并行开发的库。

你会推荐哪一个?

考虑到我在安装CilkPlus时遇到了很多问题(仍在尝试并仍在尖叫)。所以我想知道,我应该先检查TBB吗? Cilkplus比TBB好吗?你会推荐什么?

它们兼容吗?

我是否应该完成安装CilkPlus(仍在为此祈祷),是否可以将TBB与它一起使用?他们可以一起工作吗?是否有人使用CiclkPlus和TBB体验过发展?你会建议和他们一起工作吗?

三江源

6 个答案:

答案 0 :(得分:5)

以下是原始帖子中问题的常见问题解答类型信息。

Cilk Plus vs. TBB vs. Intel OpenMP

简而言之,它取决于您尝试实现的并行化类型以及应用程序的编码方式。

答案 1 :(得分:3)

此链接也可以提供帮助: Intel TBB and Cilk+ compare

答案 2 :(得分:3)

我可以在TBB的背景下回答这个问题。使用TBB的优点是:

  • 运行代码无需编译器支持。
  • TBB的通用C ++算法允许用户创建自己的对象并将它们映射到线程作为任务。
  • 用户无需担心线程管理。内置任务调度程序自动检测可能的硬件线程数。但是,用户可以选择修复性能研究的线程数。
  • 用于创建尊重依赖关系的任务的流程图很容易让用户利用功能和数据并行性。
  • TBB自然可扩展,无需迁移到更大的系统时进行代码修改。
  • 不断更新有效的论坛和文档。
  • 使用英特尔编译器,最新版本的tbb表现非常出色。

缺点可能是

  • 开源社区的用户群较少,很难找到示例
  • 文档中的示例非常基础,在旧版本中,它们甚至是错误的。但是,英特尔论坛随时准备扩展支持以解决问题。
  • 模板类中的抽象非常高,使得学习曲线非常陡峭。
  • 创建任务的开销很高。用户必须确保问题大小足够大,以便分区程序创建最佳粒度的任务。

    我也没有和cilk一起工作过,但很明显,如果两个域中都有用户,那么大多数都是TBB的用户。如果英特尔通过更新文档和免费支持推动TBB,TBB中的用户社区可能会增长

答案 3 :(得分:2)

它们可以互补使用(CILK和TBB)。通常,这是最好的。但根据我的经验,您将最常使用TBB。 TBB和CILK将根据核心数自动扩展。 (通过创建任务树,然后在运行时使用递归)。

  • TBB 是C ++的运行时库,它使用程序员定义的任务模式而不是线程。 TBB将在运行时决定最佳线程数,任务粒度和面向性能的调度(通过任务窃取实现自动负载平衡,缓存效率和内存重用)。递归创建任务(对于树,这是任务数量的对数)。

  • CILK(plus)是C / C ++语言扩展,需要编译器支持。 代码可能无法移植到不同的编译器和操作系统。它支持fork-join并行性。此外,并行化递归算法非常容易。最后,它有一些工具(spawn,sync),您可以使用它们非常轻松地并行化代码。 (不需要大量重写!)。


其他差异,可能很有趣:
a)CILK的随机工作窃取时间表,用于打击“等待”过程。
a)TBB从负载最重的过程中窃取。

答案 4 :(得分:1)

是否有理由不能使用我们在https://www.cilkplus.org/download#gcc-development-branch提供的预建GCC二进制文件?它是从cilkplus_4-8_branch构建的,应该是合理的。

您选择哪种解决方案取决于您。 Cilk提供了一种表达递归算法的非常自然的方法,如果你使用缓存遗忘算法,它的子窃取调度程序可以非常缓存。如果您对Cilk Plus有任何疑问,可以在http://software.intel.com/en-us/forums/intel-cilk-plus/的英特尔Cilk Plus论坛中获得最佳回复。

Cilk Plus和TBB相互了解,所以如果你混合它们,它们应该很好地结合在一起。您最多可以获得TBB线程池中的线程数以及Cilk工作线程数,而不是获得线程的组合爆炸。这通常意味着您将获得2P线程(其中P是核心数),除非您使用库调用或环境变量更改默认值。您可以使用Cilk Plus的矢量化功能和线程库。

- Barry Tannenbaum
  Intel Cilk Plus developer

答案 5 :(得分:0)

所以,作为来自OP的请求:

之前我使用过TBB,我很满意。它有很好的文档,论坛很活跃。看到图书馆开发人员回答这些问题并不罕见。试试看。 (我从未使用cilkplus所以我不能谈论它。)

我在Ubuntu和Windows中都使用它。您可以通过Ubuntu中的软件包管理器下载软件包,也可以自己构建源代码。在这种情况下,它应该不是问题。在Windows中,我在TBB环境下使用MinGW构建了cygwin

至于兼容性问题,不应该没有。 TBB可以与Boost.ThreadOpenMP一起使用;它的设计使它可以与其他线程解决方案混合使用。

相关问题