3

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

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

你会推荐哪一个?

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

它们兼容吗?

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

谢谢

4

5 回答 5

5

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

Cilk Plus 与 TBB 与英特尔 OpenMP

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

于 2013-10-08T15:27:45.550 回答
3

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

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

缺点可以是

  • 开源社区的用户基数低,很难找到示例

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

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

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

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

于 2017-07-14T08:22:07.047 回答
2

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

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

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


其他差异,这可能很有趣:
a) CILK 的随机工作窃取计划用于对抗“等待”进程。
a) TBB 从负载最重的进程中窃取。

于 2015-10-20T21:16:53.437 回答
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
于 2013-10-09T03:38:55.337 回答
0

因此,作为 OP 的请求:

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

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

至于兼容性问题,应该没有。TBBBoost.Threador一起工作正常OpenMP,例如;它被设计成可以与其他线程解决方案混合使用。

于 2013-10-08T14:42:45.237 回答