2011-12-30 199 views
2

我想这样的:巢做for循环并行内部的并行for循环

omp_set_nested(1); 
#pragma omp parallel for private(j) 
for (i = 0; i < n; ++i) { 
    #pragma omp parallel for 
    for (j = 0; j < m; ++j) { 
    /* do smth */ 
    } 
} 

这意味着,如果我有8个线程,而第一环路仅使用4个线程,我想内部循环来也使用其他4个线程。我怎样才能做到这一点?

回答

3

您可以指定区域中所需的线程数。

所以,如果你这样做:

omp_set_nested(1); 
#pragma omp parallel for private(j) num_threads(2) 
for (i = 0; i < n; ++i) { 
    #pragma omp parallel for num_threads(4) 
    for (j = 0; j < m; ++j) { 
     /* do smth */ 
    } 
} 

然后外环路将有2个线程。然后这两个线程中的每一个都会为内部循环产生4个线程。 (总共8个)

由于您希望每个循环使用4个线程,因此您的描述有点令人困惑。不要忘记它是嵌套的,所以它们会相乘。