[C con Clase] Threads en C

Raul Chakraborty chakras_ve en hotmail.com
Jue Jun 26 19:42:06 CEST 2008


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 +0200From: alnavegante en gmail.comTo: Cconclase en listas.conclase.netSubject: [C con Clase] Threads en CEn 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. 
_________________________________________________________________
Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines para estar siempre a la última
http://newsletters.msn.com/hm/maintenanceeses.asp?L=ES&C=ES&P=WCMaintenance&Brand=WL&RU=http%3a%2f%2fmail.live.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080626/3c489c61/attachment.html>


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