英特尔TBB禁用嵌套并行性

Yan Zhou

请考虑以下情形:我正在编写一个函数,其中有一个计算密集型循环。我将其与TBB的并行化parallel_for现在的问题是,该功能可以单独使用,并且可以从并行化中受益。或者可以在另一个循环中使用它。在后一种情况下,外循环也可以并行化。通常,最好只并行化外循环。

通常,在TBB中并行化外循环和内循环都不是问题,因为与OpenMP不同,TBB中的嵌套并行化不会导致创建其他线程。TBB只会创建更多任务。但是,有时在内部循环中创建更多任务的开销仍然是不可取的(我观察到在一种极端情况下速度降低了40%)。

那么,是否有一种方法可以让TBBparallel_for在执行另一种parallel_for算法调用etc时不创建任何任务OMP_NESTED=FALSEOpenMP的效果相似

安东

简单答案:否

简单建议:请勿使用 simple_partitioner

parallel_for除了通过task_scheduler_init限制它们的并发性之外,没有其他方法可以从外部或外部影响或其他算法task_arena但是,它们在任何情况下都不适合嵌套并行性。

无论如何,如果auto_partitioner使用它(特别是在嵌套级别),对性能不会有太大的影响,并且您遵循TBB建议的有效并行工作量。

尽管我承认在极端情况下这可能是一个问题。我们(TBB开发人员)考虑过parallel_for根据执行分区的上下文来优化自动分区参数但是问题是,知道我们是否处于嵌套级别还不足以可靠地定义参数。例如,考虑parallel_for从单个任务启动a的时间:形式上,它是嵌套的,但在外层没有并行性。为了能够实现这个想法,需要对任务计划程序的某些部分进行大量修改,以便能够在任何给定时间提供有关忙碌工人数量的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

英特尔TBB禁用嵌套并行性

来自分类Dev

英特尔 tbb 内存开销

来自分类Dev

英特尔MIC上的英特尔TBB和Cilk Plus线程关联

来自分类Dev

禁用英特尔高清显卡4000

来自分类Dev

英特尔TBB获得工作进展

来自分类Dev

英特尔tbb任务计划是否适合DBMS?

来自分类Dev

英特尔/ ARM内在等效性

来自分类Dev

在英特尔编程?

来自分类Dev

在英特尔SGX中禁用syscall意味着什么

来自分类Dev

英特尔虚拟化技术不断自动禁用

来自分类Dev

英特尔至强 E 与 Ubuntu 16.04 的兼容性

来自分类Dev

Google本机客户端(NaCl,PNaCl)中的英特尔线程构建模块(TBB)

来自分类Dev

用于Raspberry Pi 3的TBB英特尔线程构建基块

来自分类Dev

使用狙击模拟器使用英特尔 TBB 程序

来自分类Dev

英特尔®编译器/ LLVM上的并行位存放/并行位提取?

来自分类Dev

tbb:concurrent_hash_map <K,V>:英特尔线程构建模块(TBB)的示例代码

来自分类Dev

英特尔Edison模块

来自分类Dev

英特尔XDK + jsPDF

来自分类Dev

英特尔SSD术语

来自分类Dev

英特尔Nextbook降级

来自分类Dev

英特尔XDK信息

来自分类Dev

具有英特尔MIC卸载功能的异构OpenMP并行循环

来自分类Dev

英特尔TBB集成问题-Google测试项目中的VS2013编译错误

来自分类Dev

如何正确禁用英特尔SRT并卸下SSD缓存驱动器?

来自分类Dev

在 20.04 上禁用英特尔处理器上的预取

来自分类Dev

英特尔Fortran灾难性错误:令牌太长,最大值为7194

来自分类Dev

英特尔Fortran灾难性错误:令牌太长,最大值为7194

来自分类Dev

英特尔S5520UR SSD兼容性

来自分类Dev

FASM是否使用英特尔语法?