为什么 openMP 取消构造不取消工作共享区域?

Pun*_*han 3 c c++ parallel-processing process openmp

我原以为变量“i”将达到最大值 11,然后“for”工作共享区域将被取消,代码是:

omp_set_num_threads(11);

#pragma omp parallel
{

    #pragma omp for
    for(i=0;i<9999;i++){
        printf("%d by %d \n",i,omp_get_thread_num());

        if(i>11)   //2
        {
            #pragma omp cancel for 
        }

    }//for

}//parallel omp pragma
Run Code Online (Sandbox Code Playgroud)

但是我持有最大值 9998 的变量我认为这意味着工作共享区域没有被取消。

Hri*_*iev 5

默认情况下禁用取消,主要是出于性能原因。您必须通过将cancel-var ICV设置为 来专门启用取消支持true。这样做的唯一方法是将环境变量设置OMP_CANCELLATIONtrue,例如:

$ OMP_CANCELLATION=true ... ./omp_executable ...
Run Code Online (Sandbox Code Playgroud)