2016-10-21 3 views
0

Мой вопрос прост, но я не могу найти слова для поиска ответа.Являются ли те же длинные петли гарантированно одинаковыми среди потоков OpenMP

Если я это сделать:

const unsigned N = ... ; 
#pragma omp parallel 
{ 
    unsigned i; 
    #pragma omp for 
    for(i=0; i<N; i++) // first loop 
     <1st stuffs> 

    <stuffs with other omp for...> 

    #pragma omp for 
    for(i=0; i<N; i++) // second loop 
     <3rd stuffs> 
} 

первый и второй цикл гарантированно быть разделены таким же образом между потоками?

Если нет, существует ли другая возможность, чем определение размера куска в явном виде или использование предложения расписания?

ответ

3

Если определенные условия выполнены, то да (OpenMP спецификация, раздел 2.7 0,1 Петля Построить):

совместимый реализация static график должен гарантировать, что то же назначение логических чисел итераций для потоков будет использоваться в двух областях цикла, если выполняются следующие условия ар е удовлетворены: 1) и цикл областей имеют одинаковое число итераций цикла, 2) обе области петли имеет одинаковое значение chunk_size указаны, или оба областей петли не имеют chunk_size не указаны, 3) обе области петли привязать к одной и той же параллельной области и 4) ни одна из них не связана с конструкцией SIMD.

код в вашем примере удовлетворяет все четырем условия, но вы должны явно указать статическое планирование как спецификация OpenMP оставляет планирования вида рамочные по умолчанию (т.е. рода, когда нет schedule положения не присутствует) реализация.

Следующий код является примером, который полностью соответствует:

#pragma omp parallel 
{ 
    #pragma omp for schedule(static) 
    for(i=0; i<N; i++) // first loop 
     <1st stuffs> 

    <other stuff> 

    #pragma omp for schedule(static) 
    for(i=0; i<N; i++) // second loop 
     <3rd stuffs> 
} 
1

В соответствии с этим ответом https://stackoverflow.com/a/10852852/7024081 нити действительно будут присвоены те же самые диапазоны итераций в обоих циклах, предполагающих # threads и N остаются неизменными и что планирование установлен в static.

Если вы не можете установить график StatiC я не уверен, что будет происходить как планирование по умолчанию будет зависеть от реализации: https://computing.llnl.gov/tutorials/openMP/#DO

 Смежные вопросы

  • Нет связанных вопросов^_^