2017-01-03 2 views
2

Я пытаюсь использовать цикл openmp для цикла, если выполняется определенное условие. Я мог бы просто использовать оператор if else для использования цикла parallel for, если условие выполнено, но код в цикле for является немного длинным, и он будет удваивать длину кода, если я просто использую оператор if else. Поэтому в основном я хочу, лучший способ сделать это:условный параллельный цикл openmp

if(condition_holds){ 
    // use parallel for loop 
    #pragma omp parallel for 
    for(...){ 
    // Long piece of code 
    } 
}else{ 
    // Don't use parallel for loop 
    for(...){ 
    // Long piece of code 
    } 
} 

поэтому я не придется писать код внутри цикл дважды. пункт

+1

Вы можете обернуть свой «длинный кусок кода» функциональным или функциональным объектом, например. лямбда. Оба цикла 'for' будут содержать только вызов. – ilotXXI

ответ

5

Используйте OpenMP в if условно включить параллелизм:

#pragma omp parallel for if(condition_holds) 
for(...) { 

} 

Вы, вероятно, получите накладные расходы одного дополнительного вызова функции, потому что тело цикла разделяются на функцию по реализации OpenMP.

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