Synchronization OpenMP中if子句的使用

Synchronization OpenMP中if子句的使用,synchronization,task,openmp,Synchronization,Task,Openmp,无法确定以下代码中if(0)子句的用法,因为还存在#pragma omp single子句。有什么想法吗 首先,我想你应该知道其中的定义: 当任务构造上存在if子句,且if子句表达式的计算结果为false时,将生成未出错的任务,遇到的线程必须挂起当前任务区域,在生成的任务完成之前,无法继续执行该任务区域 其中未出错的任务定义为: 一种任务,其执行不会相对于其生成任务区域而延迟。也就是说,其生成任务区域将挂起,直到完成未出错任务的执行 根据一般任务描述: 遇到的线程可能会立即执行任务,或者延迟其执

无法确定以下代码中if(0)子句的用法,因为还存在#pragma omp single子句。有什么想法吗


首先,我想你应该知道其中的定义:

当任务构造上存在if子句,且if子句表达式的计算结果为false时,将生成未出错的任务,遇到的线程必须挂起当前任务区域,在生成的任务完成之前,无法继续执行该任务区域

其中未出错的任务定义为:

一种任务,其执行不会相对于其生成任务区域而延迟。也就是说,其生成任务区域将挂起,直到完成未出错任务的执行

根据一般任务描述:

遇到的线程可能会立即执行任务,或者延迟其执行。在后一种情况下,团队中的任何线程都可以被分配任务

总的来说,这让我得出结论,正如您所说的,如果(0),那么不使用
将产生相同的结果。但据我所知,
未出错
意味着生成的任务被创建它的线程立即调用

在这个上下文中,通过将任务分配给以前空闲的线程,可以确保在“一”步中创建任务A()到C(),而不需要切换上下文,或者在两者之间切换