英特尔TBB与CilkPlus 我在C++中开发了针对英特尔X8664机器的时间要求的仿真。 在研究了一点之后,我发现了两个有趣的库来支持并行化: 英特尔 英特尔

英特尔TBB与CilkPlus 我在C++中开发了针对英特尔X8664机器的时间要求的仿真。 在研究了一点之后,我发现了两个有趣的库来支持并行化: 英特尔 英特尔,c++,gcc,intel,tbb,cilk-plus,C++,Gcc,Intel,Tbb,Cilk Plus,正如文档中所述,它们都以多核处理器上的并行性为目标,但还没有弄清楚哪一个是最好的。AFAIK-Cilkplus简单地实现了三个关键字以实现更简单的并行性(这会导致重新编译GCC以支持这些关键字);而TBB只是一个促进更好的并行开发的库 你推荐哪一个? 考虑到我在安装CilkPlus时遇到了很多问题(仍在尝试,仍在尖叫)。所以我想知道,我应该先去检查TBB吗?Cilkplus比TBB好吗?你推荐什么 它们兼容吗? 如果我完成安装CilkPlus(仍在为此祈祷),是否可以将TBB与之一起使用?他们能

正如文档中所述,它们都以多核处理器上的并行性为目标,但还没有弄清楚哪一个是最好的。AFAIK-Cilkplus简单地实现了三个关键字以实现更简单的并行性(这会导致重新编译GCC以支持这些关键字);而TBB只是一个促进更好的并行开发的库

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

它们兼容吗? 如果我完成安装CilkPlus(仍在为此祈祷),是否可以将TBB与之一起使用?他们能一起工作吗?是否有人曾经使用CiclkPlus和TBB进行过软件开发?你会推荐和他们一起工作吗


谢谢你,作为OP的请求:


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

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


至于兼容性问题,不应该没有
TBB
可以与
Boost.Thread
OpenMP
配合使用;它的设计是为了能够与其他线程解决方案混合使用。

以下是原始帖子中关于该问题的一些常见问题解答类型的信息


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

您有没有理由不能使用我们提供的预构建GCC二进制文件?它是从cilkplus_4-8_分支构建的,应该是合理的最新版本

您选择哪种解决方案取决于您。Cilk提供了一种非常自然的方式来表达递归算法,如果您使用不在乎缓存的算法,它的子级窃取调度程序可以非常友好地支持缓存。如果您对Cilk Plus有任何疑问,请访问“英特尔Cilk Plus论坛”,获得最佳回复

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

- Barry Tannenbaum
  Intel Cilk Plus developer

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

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

  • CILK(plus)是一种需要编译器支持的C/C++语言扩展。 代码可能无法移植到不同的编译器和操作系统。它支持fork-join并行。而且,将递归算法并行化非常容易。最后,它有一些工具(spawn、sync),可以很容易地并行化代码。(不需要太多重写!)


其他差异,这可能很有趣:
a) CILK的反“等待”过程的随机工作窃取计划。

a) TBB从负载最重的过程中窃取。我可以在TBB的上下文中回答这个问题。使用TBB的优点是:

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

  • 开源社区中的低用户群使得很难找到示例

  • 文档中的示例非常基本,在旧版本中甚至是错误的。不过,英特尔论坛随时准备提供支持以解决问题

  • 模板类中的抽象非常高,这使得学习曲线非常陡峭

  • 创建任务的开销很高。用户必须确保问题的大小足够大,以便分区人员创建具有最佳粒度的任务

    我也没有使用过cilk,但很明显,如果有用户,我也会使用它