OpenMP supporta nativamente la riduzione di una variabile che rappresenta una matrice?È possibile eseguire una riduzione su un array con openmp?
questo dovrebbe funzionare qualcosa di simile al seguente ...
float* a = (float*) calloc(4*sizeof(float));
omp_set_num_threads(13);
#pragma omp parallel reduction(+:a)
for(i=0;i<4;i++){
a[i] += 1; // Thread-local copy of a incremented by something interesting
}
// a now contains [13 13 13 13]
Idealmente, ci sarebbe qualcosa di simile per un OMP parallelo per, e se si dispone di un numero sufficiente di thread per poter dare un senso, l'accumulo avverrebbe tramite un albero binario.
solo in FORTRAN – Anycorn
può essere che si potrebbe spiegare un po 'di più ciò che si vuole fare esattamente. Fornire il codice seriale potrebbe aiutare. – FFox
Scavando attorno a un po 'di più, suona come "solo in FORTRAN" è la risposta.Ho finito per allocare solo una vasta serie di copie locali al di fuori del ciclo, lasciando che i thread si accumulassero alle loro copie all'interno del ciclo for, quindi accumulando in un array globale dopo il ciclo for, ancora all'interno della regione parallela, all'interno di un sezione critica. –