Ho due funzioni, do_step_one(i)
e do_step_two(i)
, per i
da 0
a N-1
.Come creare un `omp parallelo for` con sincronizzazione (` barrier`) di tutte le filettature nel mezzo con OpenMP
Attualmente, ho questo codice (sequenziale):
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
}
for(unsigned int i=0; i<N; i++) {
do_step_two(i);
}
Ogni chiamata di do_step_one()
e do_step2()
può essere fatto in qualsiasi ordine e in parallelo, ma qualsiasi do_step_two()
ha bisogno alla fine di tutto il do_step_one()
per iniziare (usa i risultati do_step_one()
).
ho provato la seguente:
#omp parallel for
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
#omp barrier
do_step_two(i);
}
Ma gcc si lamenta
convolve_slices.c: 21: avvertimento: regione di barriera può non essere strettamente nidificato all'interno di work-sharing, critico, ordinato, area di attività principale o esplicita.
Cosa fraintendere? Come risolvere questo problema?
la sintassi openMP sembra sbagliato - sia per le chiamate ti sembra di essere manca il '# pragma' - lo hai omesso o non c'è? –
Lo ometto, mi dispiace, ma nel codice vero sono qui. –