2014-03-04 23 views
3

我期待該變量「i」將達到11的最大值,然後在「對」工作共享區域將被取消,代碼是:爲什麼openMP取消構造不取消工作共享區域?

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 

但變量i被保持的9998最大值,其我想這意味着工作分享區域不會被取消。

+0

標籤C或C++,他們是不一樣的語言。 – CoryKramer

+0

感謝提醒我,但是, 對於兩種語言,開放mp構造是相同的! –

+0

@Cyber​​,它們在這個例子中是同一種語言! –

回答

5

默認情況下禁用取消功能,主要是出於性能原因。您必須特別啓用取消支持,方法是將cancel-var ICV設置爲true。這樣做的唯一方法是設置環境變量OMP_CANCELLATIONtrue,例如:

$ OMP_CANCELLATION=true ... ./omp_executable ... 
相關問題