c++ - tutorial - OpenMP: ¿las variables locales son automáticamente privadas?
openmp c++ (2)
La razón para la cláusula privada es para que no tenga que cambiar su código .
La única forma de paralelizar el siguiente código sin la causa privada
int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
//do something
}
}
es cambiar el código. Por ejemplo, así:
int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
int j;
for(j = 0; j < n; j++) {
//do something
}
}
Es un código C89 / C90 perfectamente válido, pero uno de los objetivos de OpenMP no es tener que cambiar el código, excepto para agregar declaraciones pragma
que se pueden habilitar o deshabilitar en tiempo de compilación.
#pragma omp parallel
{
int x; // private to each thread ?
}
#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
int x; // private to each thread ?
}
¡Gracias!
PD: Si las variables locales son automáticamente privadas, ¿cuál es el sentido de usar una cláusula privada ?
Los datos dentro de una región paralela son privados para cada hilo.
Remítase a http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Cláusulas de atributo de intercambio de datos]