[C con Clase] threads vs openmp

Alejandro Vázquez alnavegante en gmail.com
Lun Jun 7 22:27:44 CEST 2010


Hola Samuel,

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.
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!!

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.

En cualquier caso un saludo y gracias por responder.

   Alejandro



El 7 de junio de 2010 18:06, Samuel Díaz García <samueldg en arcoscom.com>escribió:

> Bajo el supuesto de que todo funcione, yo entiendo lo siguiente:
>
>   1) Defines la función del hilo.
>   2) En el main() entiendo se lanza UN hilo.
>   3) Se termina el main() (sin esperar a que termine la ejecución de los
> hilos ni nada).
>
> ¿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.
>
> Creo que deberías saber primero en qué orden usar las diferentes funciones
> de "openmp", para inicializar y demás.
>
> 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.
>
> Salu2
>
>
>
> Alejandro Vázquez escribió:
>
>> Hola a todos,
>> 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.
>> Pues haber si hay suerte  :-)
>> Compilo con: "g++ -fopenmp man.cc -o main" en ubuntu 10.4
>>
>>
>>
>> #include <iostream>
>> #include <omp.h>
>> #include <pthread.h>
>> using namespace std;
>>
>> void *hilo(void *pointer) {
>> cout << "Entrando en thread" << endl<<endl;
>> int j;
>> #define NUM_THREADS 4 omp_set_num_threads(NUM_THREADS);
>> #pragma omp parallel {
>> int m;
>> #pragma omp for  private(j,m)
>> for (j=1;j<5;j++) {
>> m=omp_get_thread_num();
>> cout << "thread:" << m << "_"  << j  << endl;
>> std::cout.flush();
>> }
>> }
>> std::cout.flush();
>>
>>
>> }
>>
>> main() {
>>
>> pthread_t idHilo;
>> pthread_create(&idHilo,NULL, hilo, NULL);
>> std::cout.flush();
>>
>> }
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
> --
>   Samuel Díaz García
>    Director Gerente
> ArcosCom Wireless, S.L.U.
>
> CIF: B11828068
> c/ Romero Gago, 19
> Arcos de la Frontera
> 11630 - Cadiz
>
> http://www.arcoscom.com
>
> mailto:samueldg en arcoscom.es
> msn: samueldg en arcoscom.com
>
> Móvil: 651 93 72 48
> Tlfn.: 956 70 13 15
> Fax:   956 70 34 83
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
Alejandro Vazquez-Otero
Group of Non Linear Physics
Facultad de Fisicas. Univ. de Santiago de Compostela
15782 Santiago de Compostela. Spain
Tel: (+34) 981 563100 x 14002
Fax: (+34) 981 522089
E-Mail: alnavegante en gmail.com  alejandro.vazquez en rai.usc.es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100607/0c6d5045/attachment.html>


Más información sobre la lista de distribución Cconclase