Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - zairillo

#11
Programación C/C++ / Programación paralela
14 Abril 2011, 11:47 AM
Hola a todos!

Estoy empezando a trabajar con programación paralela pero necesitaría aclarar unos conceptos que, después d buscar por internet, no me quedan claros del todo.
La sentencia #pragma omp parallel lo que hace es crear tantos threads como tu definas, ¿cierto?
Entonces si dentro de esa sentencia pongo por ejemplo:

#pragma omp parallel shared(valor) //previamente definido a 0
{
id_thread = omp_get_thread_num();
leido = valor;
valor += 10;
escrito = valor;
printf("thread %d, lee valor %d y escribe valor %d", id_thread, leido, escrito);
}

Lo que hay dentro de la sentencia pragma lo ejecutará cada thread pero mientras uno lo esté ejecutando, otro no tendrá acceso a esa región, quiero decir, un thread empieza a ejecutarlo y cuando termina, empieza el siguiente y así sucesivamente, ¿es así?

Ahora bien, modifico lo siguiente en el programa:

#pragma omp parallel shared(valor) //previamente definido a 0
{
id_thread = omp_get_thread_num();
#pragma omp barrier
leido = valor;
valor += 10;
escrito = valor;
printf("thread %d, lee valor %d y escribe valor %d", id_thread, leido, escrito);
}

Por lo que cuando un thread lee la barrera, espera a que todos los demás threads lleguen ahí ¿correcto? Pero el problema que tengo es que no entiendo por qué los datos que presenta por pantalla no está en orden como en el caso anterior es decir, si la primera vez que se lee "valor" es 0 y se escribe 10, y la segunda vez se lee 10 y se esribe 20, ¿por qué no siempre va en ese orden?

Espero haberme explicado. Un saludo y muchas gracias!