[C con Clase] Threads en C

Alnavegante alnavegante en gmail.com
Jue Jun 26 21:03:13 CEST 2008


Muchas gracias por molestarte en responder -eso sobre todo- ... pero no me
queda claro. Tu dices que tengo n/2 por hilo... y que es un único
procesador...pero es que son 4 núcleos. ¿no significa eso que que cada
nucleo puede procesar por separado n/2 al mismo tiempo? es decir, que el
resultado final sería n/2 y no n/2+n/2=n? Osease, no hay una unidad de coma
flotante -FPU- por núcleo, que puede procesar operaciones independientemente
de lo que sucede en  otros nucles? ¿no es esta la principal ventaja de los
multicores?
Espero su respuesta... y de nuevo muchas gracias. Otra cosa, mi formación no
es ingeniería informática asi que muchas veces no sé por donde buscar... por
lo que si alguien pudiese recomendarme literatura en la que aclarar esto...
pues se lo agradecería mucho.



El día 26 de junio de 2008 19:42, Raul Chakraborty <chakras_ve en hotmail.com>
escribió:

>
> A ver, fijate en que tienes el mismo numero de procesadores haciendo el
> mismo trabajo. Si todo el trabajo lo hiciera un programa tardaria un tiempo
> n de procesador. Si fueran dos hilos tardaria n/2 cada uno, suponiendo que
> no existe tiempo de retardo para cambiar de hilo. Por lo tanto tardarias lo
> mismo. Ahora debes tener en cuenta de que estas cambiando de hilos, por lo
> tanto el procesador toma tiempo para cambiar de contexto.
>
> El punto es que solo tienes un procesador, he independientemente de los
> hilos que tengas corriendo de manera concurrente, el unico que puede
> procesarlos a todos es este. Por lo tanto el tiempo que tardara el truco de
> cortar un proceso en 2, mas o lo mismo en su mejor condicion ya que todos
> pasan por el mismo procesador. Si tuvieces mas de un procesador el truco que
> haces si seria valido ya que cada procesador procesaria un hilo distinto.
>
>
>  ------------------------------
> Date: Thu, 26 Jun 2008 11:29:25 +0200
> From: alnavegante en gmail.com
> To: Cconclase en listas.conclase.net
> Subject: [C con Clase] Threads en C
>
>
> En primer lugar, un saludo a todos. Esta es mi primera consulta a la lista,
> aunque la leo a diario.
>
> Mi cuestión es la siguiente: estoy trabajando con matrices la cuales
> recorro de la siguiente forma:
>
>     for( j=1; j<dimy-1; j++ )
>         {
>         for( i=1; i<dimx-1; i++ )
>             {
>              u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo
>             }
>         }
>
> y se me ha ocurrido que para acelerar el calculo, en lugar de hacer lo
> anterio, creo dos hilos -bajo Win32-, de forma que recorran la matriz asi:
>
>     for( j=1; j<dimy/2; j++ )
>         {
>         for( i=1; i<dimx-1; i++ )
>             {
>              u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo
>             }
>         }
>
>     for( j=dimy/2; j<dimy-1; j++ )
>         {
>         for( i=1; i<dimx-1; i++ )
>             {
>              u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo
>             }
>         }
>
> es decir, un hilo recorre la primera mitad de la matriz y el otro la
> segunda mitad. El caso es que este procedimiento no es más rápido, sino todo
> lo contrario... tardo entre el doble y el triple en hacerlo. ¿Alguien puede
> explilcarme por qué?  ¿no debería ser más rápido efectuar dos procesos en
> paralelo -ejecuto en un Quad Core- en lugar de uno sólo?
>
>
> Por adelantado, muchas gracias.
>
>
> ------------------------------
> Sigue al minuto las principales noticias de tu ciudad MSN Deportes<http://deportes.es.msn.com/>
>
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080626/1dd2d903/attachment.html>


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