2016-06-16 57 views
5

Sto cercando di rendere questo ciclo parallelo parallelizzato usando Openmp, ho riconosciuto che c'è una riduzione in questo ciclo quindi ho aggiunto "#pragma omp parallelo per riduzione (+, ftab)", ma non ha funzionato e mi ha dato questo errore: errore: riduzione definita dall'utente non trovata per 'ftab'.come parallelizzare questo ciclo con riduzione?

#pragma omp parallel for reduction(+:ftab) 
    for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; 

risposta

3

L'operazione che si desidera eseguire è prefix sum. Può essere fatto in parallelo. Un modo semplice è utilizzare thrust::inclusive_scan con OpenMP o TBB backend.

thrust::inclusive_scan(thrust::omp::par, ftab, ftab + 65536, fab); 

o

thrust::inclusive_scan(thrust::tbb::par, ftab, ftab + 65536, fab); 

Si potrebbe anche implementare da soli come riferimento in the Wikipedia page.