Cosa rara con el dual core


  • Administrador

    Soy novato en el mundo del multicore y no se si sera normal o no, pero cuando ejecuto algun programa estilo SETI@Home, Probe, SuperPI… y miro en el administrador de tareas los graficos esos del porcentaje de uso de cada nucleo y el global, este ultimo siempre esta al 50%. Eso lo entiendo, pero los que representan a cada nucleo no paran de subir y bajar. Cuando uno sube el otro baja y viceversa de forma que la suma da siempre el 50%. Cuando ejecuto una de estas aplicaciones ¿no deberia de estar un solo nucleo al 100% todo el rato en vez de ir cambiando de uno a otro?

    Gracias.



  • piensalo, eso no tendria mucho sentido, si tienes un doble nucleo, te interesa que cada uno soporte una carga y que ninguno de los dos se te llene de informacion que no pueda procesar, asique divide la carga entre los dos. lo raro es que te sumen 50%, porque lo suyo seria que sumaran 100%… aunque te hablo un poco desde la ignorancia, porque ni tengo un doble nucleo, ni he leido mucho sobre ellos...


  • Administrador

    Eso no es exactamente asi. Si un programa no esta preparado para multihilo, como los que he puesto antes solo se va a usar un nucleo y el otro se queda desaprobechado; es el inconveniente que tienen los multicore.

    ¿Nadie sabe nada al respecto? No es que me moleste, pero me pica la curiosidad.


  • MODERADOR

    Es sino almenos curioso… si el sistema operativo es capaz de distribuir la carga de los programas entre ambos cores, porqué no es capaz de hacerlo en la plena capacidad del procesador y no en un 50% (el equivalente a 1 solo core).
    Yo me fijé en esto hace tiempo pero no me habia parado a pensar en porque se puede distribuir las cargas entre los cores sin problema y en cambio no se pueden aprovechar los 2 al 100% si no es que esté programado para multihilo.

    Estaria bien una respuesta técnica al respecto... a mi también me pica la curiosidad ahora :D

    PD: Si no pongo afinidad a una CPU pasando el superpi llego a ver un 55% de uso de CPU. Poniendo afinidad a un core no pasa del 50% pero los resultados son los mismos a pesar de ver porcentajes más altos de uso de CPU cuando no hay afinidad.


  • Veteranos HL

    Hombre no soy un experto en la materia pero se supone que el OS envía paquetes de información al micro y este los debe procesar de modo ordenado y lo puede hacer de dos formas:

    • Cargando completamente un micro como si se tratara de un procesador monocore (la famosa afinidad).

    • Enviando la información a cada uno de los cores que conforman el procesador de forma equilibrada para no saturar los cores y siempre sobren ciclos para otras aplicaciones.

    Creo tener entendido que una aplicación que soporta multitarea es capaz de dividir el trabajo en varios procesos para cargarlo de forma independiente a tantos cores como tenga la computadora.

    Por ejemplo, si queremos calcular el numero Pi que tenga 20 millones de decimales deberíamos repartir las iteraciones para su calculo en 2 si se trata de un dualcore y 4 si hablamos de un quadcore es decir que para un dualcore 10 millones para un core y 10 millones para el otro. Pues no porque hasta que no se calculan los primeros 10 millones de decimales no se pueden calcular los 10 restantes. ¿Entonces que ocurre? si ambos cores pueden trabajar en el mismo hilo ¿porque no al 100%? Lo que ocurre es que hasta que el core_0 no ha calculado el decimal 1º el core_1 no puede calcular el 2º decimal y por tanto tampoco se puede calcular el decimal 3º y por tanto nos encontramos que como ambos micros trabajan a la misma velocidad el rendimiento máximo que podrá exprimir una aplicación es del 50%. Digo esto porque si por ejemplo tuviéramos un micro con el core_0 a 3Ghz y el core_1 a 1Ghz tendríamos una potencia total de 4Ghz y si tenemos un solo hilo al 100% en el core_0 pues tendríamos una carga total del 75% (3Ghz/4Ghz100%) del mismo modo si tuviéramos al core_1 al 100% la carga total seria del 25% (1Ghz/4Ghz100%), luego si este micro existiera y utilizara la potencia combinada de ambos cores para una misma tarea la carga total máxima alcanzable iría del 50% al 75% dependiendo de lo que se use el core más lento.

    ¿Entonces los programas que soportan multitarea que pasa que son especiales? Pues si o bien antes de realizar el proceso se reparten la carga que hará cada core y al final la juntan (programas de renderizado me parece que utilizan este método, por lo menos el Cinebench lo hace así) o el programa se encarga de repartir y sincronizar el procesamiento de la tarea de modo que no se lie la marrana, es decir que el programa decide separar la info en paquetes y sabe a que core los ha enviado y cuando le han llegado procesados para así poder ir juntándolos y ordenándolos en tiempo real (los codificadores de video y los compresores de datos son un claro ejemplo).

    Pos eso haber si los programadores se lo curran un poco y la multitarea se implanta que sino mucho sacar micros multicore y prometer que son el futuro pero si el software no acompaña se los van a comer con patatas. :sisi:

    PD: Menudo ladrillo, haber si me controlo que luego la gente no se entera. :nono:


  • MODERADOR

    Solo faltaba el detalle de "la cola de proceso", no habia caído en ello. Magnífico ejemplo :sisi:



  • Por lo que yo se cada core ejecuta un thread y cada thread esta asignado a un solo core; ojo thread no programa. Los dos cores no pueden ejecutar el mismo thread, por eso lo que siempre se dice: el SW debe estar preparado. Por ejemplo, los P4 con hyperthreading, si ejecutaban una aplicacion no basada en threads no obtenian niguna mejora y en ocasiones hasta empeoraban, asi que supongo que con los dual core pasa algo similar.

    Eso de yo calculo el digito 1 y tu el digito 2 lo veo muy muy improbable. Se podria hacer pero seria una aplicacion muy muy especifica para un sistema muy concreto, ademas el planificador de tareas del SO es el encargado de asignar los quantum de CPU a las hebras de la cola de procesos.

    Cobito, es totalmente normal que la carga de CPU este al 50% pues esta ejecutandose en ambos cores. Si le das afinidad a uno de ellos se pondra al 100% y el otro pasará a estar libre.



  • Del Seti@home que ahora mismo lo tengo, el cliente Boinc que es la versión más reciente, creo que se le puede configurar el porcentaje de procesador que usa, de todas formas a mi me ocupa el 100% cuando le dejo a él solo, porque abre dos procesos diferentes en los que trabaja en cada uno con una unidad de información distinta.



  • ¿ves? asi mejor xD uno va aprendiendo poco a poco…


  • Administrador

    @Demon_82:

    Del Seti@home que ahora mismo lo tengo, el cliente Boinc que es la versión más reciente, creo que se le puede configurar el porcentaje de procesador que usa, de todas formas a mi me ocupa el 100% cuando le dejo a él solo, porque abre dos procesos diferentes en los que trabaja en cada uno con una unidad de información distinta.

    Ya se que no tiene nada que ver, pero ¿como haces para que el seti abra dos trabajos a la vez? A mi solo me hace uno.


  • MODERADOR

    Con el BOINC. Yo recuerdo que cuando estaba en el Rosetta@Home tambien se lanzaban 2 procesos (2 unidades a procesar) y si mal no recuerdo lo hacia solito :confused:


  • MODERADOR

    Usando el BOINC como ya te han comentado todos, por defecto intenta utilizar el 100% de todos los cores disponibles, procesando un paquete por core, pero esto puedes configurarlo en el programa :sisi:

    Y como curiosidad parece que van a sacar una nueva versión que aprovechará las unidades de coma flotante de las ATI X1900 que resultan más potentes para estos fines, que cualquier procesador doméstico


  • MODERADOR

    Noticia sobre la aplicación de los GPU de ATI, en el proyecto Folding@Home aquí


  • Administrador

    Pues he reinstalado el BOINC y sigue igual. Me he fijado en que dice que tengo 1 CPU, pero no encuentro donde configurar nada de esto.


  • Administrador

    Esta mañana se me ha ocurrido actualizar Windows y ya me salen los dos Seti´s consumiendo el 100% de la CPU…

    PD: Post nº 1111


Accede para responder
 

Has perdido la conexión. Reconectando a Hardlimit.