¿OpenMP soporta de forma nativa la reducción de una variable que representa una matriz?¿Es posible hacer una reducción en una matriz con openmp?
esto funcionaría algo como lo siguiente ...
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, habría algo similar para una OMP paralelo para, y si usted tiene un número suficientemente grande de hilos para que tenga sentido, la acumulación pasaría a través de un árbol binario.
solo en fortran – Anycorn
Puede ser que pueda explicar un poco más lo que quiere hacer exactamente. Proporcionar código de serie podría ayudar. – FFox
Excavando un poco más, parece que "solo en fortran" es la respuesta.Terminé asignando solo una gran matriz de copias locales fuera del ciclo, dejando que los hilos se acumularan en sus propias copias dentro del ciclo for, luego se acumularan en un conjunto global después del ciclo for, aún dentro de la región paralela, dentro de un ciclo sección crítica. –