c++ - 具有更多衍生任务的 TBB 递归链式反应
问题描述
在 TBB (C++) 中使用递归链式反应来确定一些值时应该怎么做?
例如,在计算斐波那契数时,我们在重载的 execute() 方法中创建了两个子任务,它们是:A 计算第 n-2 个数,B 计算第 n-1 个数。在此示例中,生成了 B,并将 A 设置为 spawn_and_wait_for_all(这意味着任务 A 正在等待任务 B)。
但是,例如,如果我们必须确定 Tribonacci 数;那么我们应该有三个子任务。我的问题是,这三个任务中的哪一个应该是 spawn_and_wait_for_all 以实现最大并行度?
当我们有n个子任务时,也可以应用该问题。
解决方案
有关停滞与贪婪任务调度的背景信息,请参阅此入门。在贪婪调度器(例如 Cilk)的情况下,并行度不取决于最后发出的子任务。对于停顿的调度程序,调度停顿会降低并行度。最小化停顿数量的启发式方法是使用 spawn_and_wait_for_all 的最大子任务。这样做往往会最大限度地减少父线程耗尽工作并不得不从其他地方窃取的机会,如果其他子任务在父线程完成它窃取的任何内容之前完成,这可能会导致停顿。
推荐阅读
- python - How do I parse multiple files in Python and extract important information?
- c# - 日期从角度错误地转换为 Web api 控制器
- windows - 通过 Powershell 更改文件的文件权限
- react-native - 如何在 Expo 上使用 VSCode 调试 React Native?
- google-cloud-platform - Kubernetes Engine Cloud SQL proxy Lost connection to MySQL server at 'reading initial communication packet'
- python - 如果给定一个初始化类为 PyObject,则从 C++ 调用 Python 类方法
- python - simple web scraper very slow
- json - jMeter:JSON 断言
- java - How to set background color of PsiFileNode or its child
- python - the separators are not working properly in regular expression split method