Гнездо параллельного цикла for внутри параллельного цикла for - PullRequest
2 голосов
/ 30 декабря 2011

Я хочу сделать это:

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 потока.Как я могу это сделать?

1 Ответ

3 голосов
/ 30 декабря 2011

Вы можете указать количество потоков, которые вы хотите в регионе.

Итак, если вы сделали это:

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 потока. И тогда каждый из этих 2 потоков создаст 4 потока для внутреннего цикла. (всего 8)

Ваше описание несколько сбивает с толку, так как вы хотите, чтобы каждый цикл использовал 4 потока. Не забывайте, что он вложенный, поэтому они размножаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...