Hola de nuevo, <div><br></div><div>y gracias por las respuestas. Jorge:</div><div><br></div><div>>>El pthread_exit() es para la finalización de los hilos.</div><div><br></div><div>tienes toda la razón, pero a veces las prisas traicionan.</div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><div><br></div><div>>>usar en un programa tanto pthread como OpenMP me parece raro por no decir otra palabra (estupido).</div><div><br></div><div>bueeeeno, obviamente este programa no tiene mucho jugo. Pero estoy intentando incorporar determinadas propiedades a otro programa y el anterior es una exploración. Imagínate cuatro robots (instancias de la clase robot) cada uno de ellos corriendo en un hilo (thread, tarea, hebra, qué mas dá) y comunícándose via  la shared memory. Cada uno de estos en un momento determinado deben correr un modelo (digamos en una malla cartesiana bajo una discretización FTCS un determinado modelo químico) que es extremadamente costoso. Y en las pruebas preliminares pasando esta integración espacial a openmp estoy obteniendo 20x de aceleración. Pues asi ya tiene màs jugo, claro.</div>
<div><br></div><div>>><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Esto ya es mas vanal pero para compilar, g++ -fopenmp man.cc -o main, no es necesario que pongas -fopenmp</span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">pues lo cierto es que es bastante necesario. Creo que no lo has compilado...? Otra cosa es que en el programa final vaya todo definido en un make, pero no voy a hacer un make para un sólo archivo, verdad?. </span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Un saludo, </span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">  Alejandro</span></div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><br></div><div><br></div><div><br><br><div class="gmail_quote">El 8 de junio de 2010 11:11, Jorge Vega Sanchez <span dir="ltr"><<a href="mailto:memmaker650@gmail.com">memmaker650@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word">Comentarte algunas cosas.<div><br></div><div>Sobre pthreads. El hilo que creas en el programa principal puede que funcione pero de chiripia, es necesario o muy recomendable definir idetificadores de hilo. Luego hay que darle unas propiedades a cada hilo. Y una vez creado normlamente el programa principal debe esperar a que termine con un pthread_join(id_hilo_creado);</div>
<div>El pthread_exit() es para la finalización de los hilos.</div><div><br></div><div>Segundo, usar en un programa tanto pthread como OpenMP me parece raro por no decir otra palabra (estupido). Es muy facil liarse mezclando cosas. Selecciona una de los dos métodos y trata de dominarlo lo más posible.</div>
<div><br></div><div>Tercero, hablar de hilos hijos digamos que es un tanto erroneo. Sólo se usa con procesos.</div><div><br></div><div>Cuarto. Esto ya es mas vanal pero para compilar, g++ -fopenmp man.cc -o main, no es necesario que pongas -fopenmp porque ya la defines por defecto y por lo tanto el compilador ya sabe donde buscar la librería.</div>
<div><div></div><div class="h5"><div><div><div>On 07/06/2010, at 22:27, Alejandro Vázquez wrote:</div><br><blockquote type="cite">Hola Samuel,<div><br></div><div>gracias por la respuesta. Tienes razón en que olvidé incluir un "pthread_exit(NULL)" tras lanzar el hilo para que el main espere a que termine su ejecucion. Pero el problema no esta ahi.</div>
 <div>Poniendo esta "barrera" para que el main espera a que termine el hilo, igualmente dentro del hilo la instancia openmp no se ejecuta correctamente. En este ejemplo deberian lanzarse 4 hilos hijos desde ese thread (debido a la clausula openmp) y en su lugar sólo aparece uno!!</div>
 <div><br></div><div>Buceando por los foros de gcc parece que esta señalado como un bug. Lo he descubierto hace poco... hay algun problema con el gcc (g++) y lanzar hilos hijos desde un thread via openmp. </div><div><br></div>
 <div>En cualquier caso un saludo y gracias por responder.</div><div><br></div><div>   Alejandro</div><div><br></div><div><div><br></div><div><br><div class="gmail_quote">El 7 de junio de 2010 18:06, Samuel Díaz García <span dir="ltr"><<a href="mailto:samueldg@arcoscom.com" target="_blank">samueldg@arcoscom.com</a>></span> escribió:<br>
 <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bajo el supuesto de que todo funcione, yo entiendo lo siguiente:<br> <br>   1) Defines la función del hilo.<br>   2) En el main() entiendo se lanza UN hilo.<br>
   3) Se termina el main() (sin esperar a que termine la ejecución de los hilos ni nada).<br> <br> ¿Sigues preguntando por qué no te funciona? Yo, desde mi punto de vista, sin conocer bien cómo funcionan las librerías "openmp", creo que el código que has mostrado no es muy consistente.<br>
 <br> Creo que deberías saber primero en qué orden usar las diferentes funciones de "openmp", para inicializar y demás.<br> <br> Aparte de ello, lo normal, es que el proceso principal siempre espere a que terminen los procesos hijos, ahora bien, al ser "hilos" de ejecución, se entiende que al terminar el proceso principal, el sistema operativo abortará la ejecución de cuantos hilos haya lanzado éste.<br>
 <br> Salu2<br> <br> <br> <br> Alejandro Vázquez escribió:<br> <blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0,8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">
<div><div></div><div> Hola a todos, <br> lo primero un saludo a todos. Mi cuestion es muy simple: tengo un programilla que paraleliza una suma matricial (al menos en esencia) bajo openmp, y funciona perfectamente, de  47 segundos pasamos a 4. El caso que es que realizando la misma paralelización dentro de un thread no funciona. Les adjunto un ejemplo mas simple donde lanzo un thread y dentro del mismo implemento una paralelización con openmp. Si funcionase cada uno de los hilos hijo deberia imprimir su número... pero no es asi.  <br>
 Pues haber si hay suerte  :-) <br> Compilo con: "g++ -fopenmp man.cc -o main" en ubuntu 10.4<br> <br> <br> <br> #include <iostream><br> #include <omp.h><br> #include <pthread.h><br> using namespace std;<br>
 <br> void *hilo(void *pointer) {<br> cout << "Entrando en thread" << endl<<endl;<br> int j;<br> #define NUM_THREADS 4 omp_set_num_threads(NUM_THREADS);<br> #pragma omp parallel {<br> int m;<br>
 #pragma omp for  private(j,m)<br> for (j=1;j<5;j++) {<br> m=omp_get_thread_num();<br> cout << "thread:" << m << "_"  << j  << endl;<br> std::cout.flush();<br> }<br> }<br>
 std::cout.flush();<br> <br> <br> }<br> <br> main() {<br> <br> pthread_t idHilo;<br> pthread_create(&idHilo,NULL, hilo, NULL);<br> std::cout.flush();<br> <br> }<br> <br> <br> <br> <br> <br> <br> <br>  <br> <br></div></div>
 ------------------------------------------------------------------------<br> <br> _______________________________________________<br> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
 <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
 </blockquote> <br> -- <br>   Samuel Díaz García<br>    Director Gerente<br> ArcosCom Wireless, S.L.U.<br> <br> CIF: B11828068<br> c/ Romero Gago, 19<br> Arcos de la Frontera<br> 11630 - Cadiz<br> <br> <a href="http://www.arcoscom.com" target="_blank">http://www.arcoscom.com</a><br>
 <br> mailto:<a href="mailto:samueldg@arcoscom.es" target="_blank">samueldg@arcoscom.es</a><br> msn: <a href="mailto:samueldg@arcoscom.com" target="_blank">samueldg@arcoscom.com</a><br> <br> Móvil: 651 93 72 48<br> Tlfn.: 956 70 13 15<br>
 Fax:   956 70 34 83<br> <br> _______________________________________________<br> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
 Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br> </blockquote></div><br><br clear="all"><br>-- <br>Alejandro Vazquez-Otero<br>
Group of Non Linear Physics<br>Facultad de Fisicas. Univ. de Santiago de Compostela<br>15782 Santiago de Compostela. Spain<br>Tel: (+34) 981 563100 x 14002<br> Fax: (+34) 981 522089<br>E-Mail: <a href="mailto:alnavegante@gmail.com" target="_blank">alnavegante@gmail.com</a>  <a href="mailto:alejandro.vazquez@rai.usc.es" target="_blank">alejandro.vazquez@rai.usc.es</a> <br>
 </div></div> _______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></blockquote></div><br></div></div></div></div><br>_______________________________________________<br>

Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><br>-- <br>Alejandro Vazquez-Otero<br>
Group of Non Linear Physics<br>Facultad de Fisicas. Univ. de Santiago de Compostela<br>15782 Santiago de Compostela. Spain<br>Tel: (+34) 981 563100 x 14002<br>Fax: (+34) 981 522089<br>E-Mail: <a href="mailto:alnavegante@gmail.com">alnavegante@gmail.com</a>  <a href="mailto:alejandro.vazquez@rai.usc.es">alejandro.vazquez@rai.usc.es</a> <br>

</div>