Pregunta

Estoy ejecutando algunas cosas bastante intensivas en procesador en mi PC, y nota que mi uso de CPU se ve bastante extraño. Mi PC es un I7-870 de cuatro núcleos, que supuestamente tiene ocho núcleos virtuales.
Estoy usando la biblioteca paralela de la tarea en .NET 4, así que espere que todos los núcleos se utilicen bien, pero obtengo información como esta del monitor de proceso:

CPU usage

Los núcleos 6 y 8 apenas se tocan, y aparte de una breve explosión, 4 tampoco.
¿Es esto lo que debería esperar?

¿Fue útil?

Solución

En su mayor parte, sí, creo que esto parece razonable. Tenga en cuenta que la hiperthreading realmente solo falsificaciones dos núcleos. Cada núcleo físico recibe dos frontends, por lo que puede leer dos transmisiones de instrucciones en paralelo. Pero todavía comparten las mismas unidades de ejecución. Entonces, cuando un núcleo HT está ocupado, se toman las unidades de ejecución, por lo que su núcleo "gemelo" podrá hacer muy poco trabajo.

Eso parece ser lo que estás viendo en los dos primeros núcleos (el segundo en particular lo hace muy obvio)

Aparte de esto, casi nunca podrás obtener la utilización perfecta de la CPU. A veces, un núcleo solo tiene que detenerse esperando la memoria. A veces está ejecutando una instrucción costosa no pipelada, bloqueando efectivamente las unidades de ejecución en ese núcleo físico para quizás decenas o incluso cientos de ciclos.

Y a veces, las dependencias entre instrucciones pueden significar que no tener Cualquier cosa para que uno o más núcleos ejecuten.

Aparte de eso, ves 8 gráficos, y solo tienes 4 núcleos, así que Sí, por supuesto que la hipertrimidad está funcionando. ;)

Otros consejos

En breve

  1. si funciona (por supuesto)
  2. perfil
  3. YMMV - La hipertrimidad no es multi -core y, como tal, depende en gran medida del tipo de carga de instrucciones y saturación de caché, etc. No saber nada sobre su código (excepto que es C#, realmente) puede buscar colecciones de 'objetos pequeños' que podría convertirse en un sistema directo. estructuras (Un genérico List<> También usará una matriz internamente y optimizará para los tipos de elementos de estructura)

$0.02

Todo depende de la implementación de su algoritmo. TPL utilizará un número adecuado de núcleos dependiendo de la dependencia de los datos en su algoritmo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top