<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
<BR><FONT color=#0000ff>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. </FONT><BR>
<FONT color=#0000ff></FONT> <BR>
<FONT color=#0000ff>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.<BR>
<BR><BR></FONT>
<BLOCKQUOTE>
<HR>
Date: Thu, 26 Jun 2008 11:29:25 +0200<BR>From: alnavegante@gmail.com<BR>To: Cconclase@listas.conclase.net<BR>Subject: [C con Clase] Threads en C<BR><BR>En primer lugar, un saludo a todos. Esta es mi primera consulta a la lista, aunque la leo a diario.<BR><BR>Mi cuestión es la siguiente: estoy trabajando con matrices la cuales recorro de la siguiente forma:<BR><BR>    for( j=1; j<dimy-1; j++ )<BR>        {<BR>        for( i=1; i<dimx-1; i++ )<BR>            {<BR>             u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo<BR>            }<BR>        }<BR><BR>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: <BR><BR>    for( j=1; j<dimy/2; j++ )<BR>        {<BR>        for( i=1; i<dimx-1; i++ )<BR>            {<BR>             u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo<BR>            }<BR>        }<BR><BR>    for( j=dimy/2; j<dimy-1; j++ )<BR>        {<BR>        for( i=1; i<dimx-1; i++ )<BR>            {<BR>             u[j][i]=f(u[j+1][i],u[j-1][i]) //no es mas que un ejemplo<BR>            }<BR>        }<BR><BR>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?<BR><BR><BR>Por adelantado, muchas gracias. <BR></BLOCKQUOTE><br /><hr />Sigue al minuto las principales noticias de tu ciudad <a href='http://deportes.es.msn.com/' target='_new'>MSN Deportes</a></body>
</html>