2010-08-23 7 views
10

Estoy jugando un poco con mi programa (tratando de multinúcleo algunas partes) y he notado que el "historial de CPU" se ve un poco diferente, depende de cuántos trabajadores comienzo. 2-4 trabajadores parecen producir un flujo de trabajo "estable", sin embargo, vincular 5-8 trabajadores produce un comportamiento errático (de cero a máximo, ver imágenes). Debo señalar que todas las ejecuciones comenzaron con una capacidad máxima "uniforme" (por ejemplo, 2 núcleos con solo el 25%), y comenzaron a mostrar un comportamiento errático solo después de un minuto más o menos. ¿Qué está pasando? Tengo 4 procesadores centrales, ¿y crees que este comportamiento puede estar relacionado con este hecho?comportamiento diferente cuando se utiliza un número diferente de trabajadores de multiconector

Espero que puedan ver las fotos.

2 trabajadores 2 workers

3 trabajadores 3 workers

4 trabajadores 4 workers

5 trabajadores 5 workers

6 trabajadores 6 workers

7 trabajadores 7 workers

8 trabajadores 8 workers

+2

¿Estás utilizando el paquete 'multicore' o' doSMP'? ¿Esto es en Windows 7? – Shane

+0

¿Cuál es el propósito de sus trabajadores? ¿son completamente independientes el uno del otro? tal vez sus trabajadores sufren de inanición. –

+0

¿Hay alguna pregunta aquí? Si es así, ¿qué es? –

Respuesta

11

Este es el comportamiento clásico en una de cuatro núcleos con hyperthreading. R no gana con hyperthreading, ya que a menudo utiliza el núcleo completo para los cálculos. Por lo tanto, si un procesador físico hace 2 lógicos, el procesador debe cambiar continuamente entre ambos hilos, lo que explica los patrones.

Para R, dejé el hyperthreading en mi computadora. Simplemente no ayuda, al contrario. Cuando se trabaja con un solo hilo como R lo hace normalmente, se pierde capacidad (max es 12.5% ​​en vez de 25%).

+1

Recuerde también que, de forma predeterminada, un proceso no está vinculado a un núcleo sino que salta entre núcleos todo el tiempo. Esto explica por qué ve el efecto que observa aumentar gradualmente en lugar de ser obvio en 2 núcleos lógicos en el momento en que tiene más de 4 trabajadores. También explica los gráficos espigados que inevitablemente tienes en una máquina multinúcleo. –

+0

No compro esta explicación. Un programa bien escrito de CPU puede hacer un mejor uso de las CPU. –

+0

@David: ¿qué es lo que no compras? ¿El hecho de que si solo tiene 4 núcleos físicos y 8 núcleos lógicos, el procesador debe cambiar entre dos hilos? ¿De qué otra forma pones 2 hilos en un núcleo? ¿Simultaneamente? ¿O el hecho de que, a menos que usted vincule un proceso específicamente a un núcleo, el proceso en sí cambie los núcleos siempre que parezca factible? –

Cuestiones relacionadas