2011-12-30 254 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個線程,因此您的描述有點令人困惑。不要忘記它是嵌套的,所以它們會相乘。