¿Por qué mi CPU no funciona a su máximo potencial incluso cuando mi aplicación (que utiliza los recursos de la CPU) está retrasada?


30

¿Por qué mi CPU nunca alcanza el máximo incluso cuando mi aplicación, que consume el 40% de la CPU (pero el 30 - 40% de la CPU todavía permanece inactiva), es lenta?

Eso significa:

  1. Hay una manera de obligar a la CPU a funcionar al 100%
  2. Las CPU se fabrican de esa manera y lo único que puedo hacer es comprar nuevo hardware.
  3. La limitación radica en la aplicación y el retraso no mejorará incluso con una mejor CPU. (Suponiendo que la aplicación es perfecta, lo que pregunto es si el software se ejecuta de esa manera).
  4. Algo más.

44
Entiendo a qué se dirige OP, desprecio cómo cuando el antivirus o la actualización de Windows se está ejecutando, bloquea completamente mi sistema, maximizando ese único núcleo ... ¿dejando que el resto de ellos haga qué? Termino sentado durante 12 minutos hasta que pueda volver a trabajar.

10
Cualquier aplicación que maximice incluso uno de los varios recursos compartidos en una computadora (CPU, almacenamiento, memoria o red) puede hacer que todo el sistema sea lento, a pesar de que los recursos compartidos restantes tienen capacidad no utilizada.
Digo reinstalar a Mónica el

78
He estado programando durante 25 años. Y te puedo asegurar que esto no es una conspiración. Es raro encontrar aplicaciones donde la CPU es el cuello de botella, la mayoría de las veces las aplicaciones están esperando otras cosas como el disco duro, la RAM o la red.
Contango

10
Supongamos que está haciendo un trabajo computacional, haciendo sus impuestos, digamos. Si hace cero trabajo mientras espera que lleguen sus formularios de impuestos por correo, entonces hará cero trabajo durante mucho, mucho tiempo. Las aplicaciones laggy a menudo están mal escritas; bloquean el hilo de la interfaz de usuario en operaciones de alta latencia como disco o red IO que no tienen nada que ver con la CPU, por lo que la CPU está inactiva y la aplicación no responde. Obtener una CPU más rápida no ayuda; eso solo te lleva a las operaciones de bloqueo de alta latencia más rápido .
Eric Lippert el

3
@TwistyImpersonator: Esa es una buena analogía para los programas multiproceso de alta contención. A veces vemos que un programa multiproceso se ejecutará más lentamente en una CPU más rápida porque la CPU está obteniendo más subprocesos en un estado bloqueado más rápido de lo que lo haría una CPU más lenta. Si todos los conductores en la ciudad de Nueva York recibieran un automóvil 10 veces más rápido mañana, los tiempos de viaje no mejorarían . Se pondrían peor.
Eric Lippert

Respuestas:


94

Probablemente esté ejecutando aplicaciones de subproceso único que solo pueden maximizar un solo núcleo de CPU. Dado que el 100% de un núcleo es inferior al 100% de la capacidad de la CPU multinúcleo, la utilización total de la CPU no alcanza el 100%.

Puede confirmar esto viendo la utilización del núcleo individual en el Administrador de tareas. Busque núcleos individuales que se aproximen a la utilización máxima.


24
Debido al cambio, solo verá el uso distribuido que resume el uso de un núcleo. Básicamente, la aplicación usa exactamente un núcleo, pero salta entre los núcleos, por lo que cada uno tiene un promedio de 1 / n.
Aganju

62
También diría que es posible que la CPU no sea realmente el cuello de botella.

16
Recuerdo vagamente que Dwarf Fortress embotellaba un núcleo al 100%, por lo que comenzó a bifurcar otros bits en un segundo hilo, lo que provocó que el hilo "principal" se bloqueara al 100%, y el hilo "de fondo" oscilara alrededor del 20-60%. En un núcleo cuádruple, eso es ... 30-40%.
Mooing Duck

3
No olvide el modo Turbo en las CPU. Taskmanager no tiene eso en cuenta al calcular el porcentaje de carga. En mi i5-4570S veo a menudo una carga de aproximadamente el 30%. Eso es un núcleo (25%) con turbo regular de 2,9 GHz a 3,4 GHz. 25 * 3,4 / 2,9 es casi el 30%. Con una distribución más alta entre la frecuencia normal y Turbo, podemos aumentar.
Sunzi

77
@AytAyt: iría un paso más allá y diría que no solo es posible, es casi seguro . A menos que la aplicación del OP esté haciendo un crujido de números puro (o usando spin-locks en todas partes), en realidad es bastante difícil cargar completamente una CPU, incluso con un programa multiproceso. Cualquier disco o red de E / S dejará ciclos inactivos, y dada la mención del OP de una aplicación "retrasada", parece probable que haya alguna comunicación de red en juego.
Aroth

49

No ha especificado su sistema operativo. Entonces la respuesta será común como.

Las aplicaciones pueden estar limitadas por varias razones. El cuello de botella puede estar en:

  • UPC
    • baja velocidad
    • Aplicaciones de subproceso único / bajo (no es capaz de usar todos los núcleos / subprocesos)
  • I / O
    • rendimiento de disco
    • latencia de disco
    • rendimiento de red
    • Latencia de conexion
  • memoria
    • capacidad
    • empuje
    • estado latente
    • caché insuficiente
    • localidad (NUMA)
    • intercambio

Y hay más razones, que no son tan comunes.

Así que eche un vistazo a los recursos de su sistema e intente analizar su sistema en busca de otros cuellos de botella, que solo la carga total de la CPU.


9
Además: la tarjeta de video tiene GPU, E / S y memoria separadas, cualquiera de esos también podría ser el problema.
Mooing Duck

2
@MooingDuck Es cierto, pero que por lo general sólo puede ser un problema si la aplicación en cuestión en realidad está utilizando la GPU (es decir, un juego en 3D o una aplicación CUDA / OpenCL o algo por el estilo.)
reirab

13

En general, cuando la gente habla de que su computadora es lenta, menciono polvo. Como ex técnico en informática con 15 años de experiencia profesional, descubrí que simplemente soplar el polvo puede mejorar significativamente el rendimiento.

No estoy hablando de una cantidad delgada, casi imperceptible de polvo, sino de grandes grupos o incluso tapetes que impiden el flujo de aire normal. He visto disipadores de calor que tenían básicamente un filtro sobre ellos que era polvo, en lugar de un filtro real. Esto bloquea una cantidad muy significativa de aire para que nunca enfríe la CPU. Eliminar el polvo de esta manera tenderá a silenciar los ventiladores instantáneamente y permitirá que sus componentes sobrevivan más tiempo. Heat había matado muchas computadoras que me pidieron que arreglara.

De acuerdo con la idea del problema del calor, también podría probar una mejor pasta térmica. El blanco cr @ p con el que vienen la mayoría de los procesadores es como el Yugo de pasta térmica. Yo uso Arctic Silver, pero hay cosas mejores que eso, incluso. Arctic Silver se trata de un Porche (usando la escala de calificación de automóviles), pero hay variedades de Ferrari y superdeportivos.

Los procesadores tienden a ralentizarse cuando se sobrecalientan. Esto es algo físico, así como una "autopreservación" programada en muchas CPU. No sé si aún mostrará el 100% en el Administrador de tareas o si mostrará el 40% (como puede ver), pero puede ser una desaceleración significativa mientras la CPU intenta dejar que el calor se disipe y se ventile " alcanzar."

Otra cosa que podría estar ralentizando su CPU es la GPU. Si está ejecutando juegos o utilidades gráficas intensivas (como CAD), su GPU podría estar frenando su CPU. Obtener una mejor tarjeta de video puede ser algo para mirar. Además, el uso de la tarjeta correcta incorrecta podría estar deteniéndote. Las tarjetas de juego no están (generalmente) diseñadas para funcionar con CAD, así como las tarjetas de estaciones de trabajo, y las tarjetas de estaciones de trabajo (generalmente) tampoco funcionan muy bien. Algunos lo hacen, pero la mayoría no.

Como mencionó @Jaroslav Kucera, podría estar relacionado con el disco. Golpear mucho los HD puede ralentizar tu camino. Normalmente ejecuto varias unidades. Uno dedicado al sistema operativo y otro (s) para software, archivos de página de Windows, archivos personales, etc. Además de no tener que preocuparse tanto por hacer una copia de seguridad de los datos personales en caso de falla del sistema operativo, tener múltiples discos duros distribuye la carga de trabajo considerablemente. Leer y escribir en el mismo disco al mismo tiempo puede ralentizar seriamente la HD. El uso de SHD puede mitigar esto, pero no del todo. Se sabe que Photoshop y el software de edición de video golpean duro los discos duros. Leer desde un HD y luego emitir a un segundo HD es el camino a seguir. Esto también ayuda a la vida de sus HD. También voy con enfriamiento activo en mis HD. No he matado un disco duro desde que les puse un ventilador y un disipador de calor hace más de 15 años. Google ellos, son seguros baratos.

Lo creas o no, tu PSU también podría estar desacelerándote. Si no tiene suficiente energía (o su PSU es vieja o un punto de venta chino barato y sobrevalorado), puede tener problemas de rendimiento. He visto de primera mano qué problemas extraños del sistema operativo puede hacer una PSU escamosa. Está buscando voltaje y amplificadores, así que asegúrese de que todos coincidan con las especificaciones de la fuente de alimentación, si sigue esta ruta, y también asegúrese de que cumplan o excedan sus necesidades de energía. Si sus componentes suman 500 vatios y les está dando incluso 475, eso es malo. Recomiendo repasar sus requisitos en aproximadamente un 20%, por lo que a medida que su fuente de alimentación envejece (y deja de funcionar) y sus otros componentes envejecen (y requieren más energía), no se queda atascado comprando una nueva fuente de alimentación tan rápidamente.

Incluyendo las otras respuestas aquí, todavía hay más razones para que su computadora funcione lentamente. Excepto por la opción de PSU, lo que hablé se vio muy comúnmente cuando era un técnico en informática. Hacer un punto de referencia y otras pruebas son la única forma en que podrás resolver las cosas. Es posible que el intercambio de partes ni siquiera resuelva el problema si es una combinación de varias partes lo que causa la desaceleración.

Y, AFAIK, no hay forma de obligar a su computadora a usar el 100% del procesador. La CPU y el sistema operativo saben lo que deben hacer y, por lo general, son muy buenos en sus trabajos. :-) No creo que nadie haya descubierto una manera de forzar la alimentación de una CPU para que funcione al 100% cuando cree que debería hacerlo. Al menos no sin alimentarlo con basura extra para que el porcentaje "se vea bien".

Con usted viendo 40% y no y una división de números enteros de 100% (como 25%, 33% o 50%), tengo la sensación de que no se trata de un solo problema de subprocesos. Podría ser, pero no es donde va mi mente. Sin embargo, hace +1 en @Twisty Impersonator por mencionarlo de inmediato.

¡Buena suerte tratando de resolver esto! He pasado días tratando de resolver este tipo de cosas, solo para terminar reemplazando la mayoría de las tripas como "último recurso".


1
+1 para señalar la posibilidad de que una aplicación se pueda colgar en una GPU al máximo.
Digo reinstalar a Mónica el

66
Olvidé mencionar que fumar cerca de su computadora es una de las peores cosas que puede hacer. Deja un desagradable, asqueroso y desagradable (no puedo enfatizar lo suficiente) un desorden pegajoso de color naranja que no se puede limpiar. El polvo se apelmaza y es imposible de limpiar. Es posible que pueda hacerlo con un baño de aceite para autopartes o un baño de agua sónico, pero nunca tuve ese problema. Incluso limpiar el estuche es un esfuerzo inútil.
computercarguy

2
Solo desde la perspectiva de un desarrollador, la CPU hará lo que le pidas. Si no está maximizado al 100%, es porque su programa está esperando que sucedan otras cosas (disco IO, red, entrada del usuario, mensajes del sistema, etc.). Si tiene algo que hacer para la CPU, usará automáticamente el 100% (suponiendo una aplicación multiproceso) para hacer lo que su programa necesita: no tiene que "hacer que" use el 100% o desbloquearlo o algo así.
JPhi1618

2
@ JPhi1618: Te estás olvidando del calor. Independientemente de lo que le diga que haga, si la CPU se sobrecalienta, se acelerará para funcionar a menos del 100%.
Mooing Duck

9
@ Las CPU JPhi1618 generalmente se estrangulan al escalar su frecuencia (subclocking), por lo que en lugar de funcionar a, digamos, en lugar de 3.0 GHz, funcionan a 2.0 GHz. Por lo tanto, la CPU regulada térmicamente aún puede informar una carga del 100%, ya que cada "ranura de trabajo" está ocupada, solo hay menos "ranuras de trabajo" en la unidad de tiempo disponible.
el.pescado

3

Podrían ser configuraciones de ahorro de energía en BIOS o en el sistema operativo. Muchas CPU y placas base modernas tienen configuraciones para permitir que la CPU sea más económica con el uso de electricidad (especialmente para las computadoras portátiles que desean que la batería dure). Probablemente pueda desactivar dicha configuración, pero asegúrese de saber lo que está haciendo, ya que junto a la configuración, generalmente hay otras cosas que pueden afectar la funcionalidad de la computadora de otras maneras importantes.


2

Regularmente llego al 100% de utilización cuando hago tareas de renderizado y matemáticas. Verificaré que hyperthreading alcanzará un alto 100%, y el pedido de instrucciones es un gran problema. Intel y AMD tienen grandes cantidades de hardware dedicado al reordenamiento de instrucciones para llenar tantos núcleos de ejecución como sea posible. Si obtiene un 30% en una máquina moderna, puede

  • Verifique los tiempos: Intel y AMD ambos descienden cuando se calientan y se muestra como tartamudeos y picos.
  • No estaré haciendo mucho con eso ... los ejemplos son:
    1. Buscando en la web
    2. Email
    3. Juegos más simples
    4. Casi te garantizo que tu problema es uno o todos los siguientes, comenzando desde arriba:
  • Obtén un SSD
  • Obtén un SSD
  • Obtenga su sistema operativo en el SSD y mueva los datos normales a una unidad tradicional de TB múltiple. Windows necesita más acceso a sus archivos locales que cualquier otra cosa.
  • Bonazai Buddy?
  • Mantenga todas las unidades con una capacidad superior al 10% como mínimo. NTFS es un sistema de archivos de registro en diario y el rendimiento disminuye a medida que se llena la unidad.
  • Necesita una unidad NVMe / SSD para su unidad OS lo antes posible (sí, lo dije de nuevo). El rendimiento es sorprendente, y continúa con la segunda parte de esto ... Un minorista importante estaba vendiendo unidades Samsung 961 NMVe 512GB por $ 300 hoy, lo cual es suficiente para el uso normal.
  • Windows 10 es GPU pesado. Una tarjeta de video dedicada barata puede quitar la carga tanto de la memoria como de la CPU. Todavía puede usar la APU en combinación con la tarjeta de video, pero ahorrará algo de RAM, y la VRAM generalmente es mucho más rápida.
  • Las CPU de menor recuento de núcleos también están vinculadas a la memoria. Si nos fijamos en los i7s, todos ejecutan DDR de cuatro canales en 4 bancos. Los chips Epyc de AMD serán DDR5 de 8 canales con 64 núcleos. No ayuda Finalmente, y no puedo enfatizar esto lo suficiente, descargue el dinero en la cantidad de RAM que necesitará su máquina. Tengo 32 GB y compraré 32 más más adelante este año. Windows hace algo similar a la superfetch que es un poco más nueva que comprime la memoria en la RAM que no se está utilizando para que los programas y los datos se puedan descomprimir cuando sea necesario. Como otro ejemplo, ejecuto una máquina virtual Linux para el desarrollo, asigné 6/12 núcleos y 16 GB de RAM, y después de la primera carga del SSD, comienza en ~ 3 segundos. La CPU se considera muy barata en estos días por optimizaciones como esa ...

Todo esto parece excesivo hasta que estoy atascado compilando un proyecto de archivo de 70k o escalando archivos en bruto de cámaras gigantes a 17 "x26" x600 ppp a color de 16 bits. Incluso al 100% de utilización, los recursos son tan exagerados que no se ralentiza. La otra noche me di cuenta de que tenía dos máquinas virtuales y un Wolf 2 cargado junto con 2 IDEs (estoy distraído, demandame) y no noté desaceleración. Esta es una máquina de ~ $ 1500 BTW, nada especial, y la más lenta comprada a lo largo de los años. La mitad de eso es uno de los Radeon RX64 porque mi tarjeta de video tenía 6 años. Gran diferencia en render y tal. La actualización probablemente le dará más uso de su hardware que asumir que su 30% de uso es todo lo que obtendrá.

Si lanzara un disco duro de 5400 RPM en esta máquina para el sistema operativo, funcionaría como una mierda total.

TL; DR parece que estás vinculado a la CPU en este momento. Gaste un par de cientos en al menos un SSD de 256 GB para el sistema operativo, 8 GB de RAM y una tarjeta de jugador de gama baja y la computadora durará años. Éste sobrevivió durante 6 años antes de que finalmente hiciera una actualización de procesador y Mobo y estaba compilando un conjunto completo de compiladores cruzados aproximadamente 25 veces al día con el equipo antiguo.

Llámame exagerado pero no recomiendo 8 tarjetas Tesla ni nada. :-) Realice actualizaciones menores cuando pueda y creo que resolverá muchos de estos problemas. Lo hice hace años al agregar un SSD a un sistema Q6600 y ver el rendimiento triple.


1

Sin conocer los detalles de su programa, es difícil saberlo, pero dado que otra respuesta considera la posibilidad de que la aplicación sea de un solo subproceso, la veré como si estuviera usando el subprocesamiento múltiple adecuado.

Una cosa común que se pasa por alto son los núcleos físicos frente a los "núcleos hiperprocesados". Hyperthreading sobresale en muchas tareas cortas con cuellos de botella distintos a la CPU. Para las tareas de cuello de botella de CPU de bucle cerrado, todavía está limitado por su recuento de núcleos físicos, que generalmente es la mitad de su recuento de núcleos hipertrontados. En el peor de los casos, su administrador de tareas solo puede mostrar un 50% de uso porque cuenta los núcleos hipertronchados en sus gráficos, cuando en realidad, sus núcleos físicos pueden estar al 100% de uso. Sin embargo, en general, mostraría más que eso, ya que su sistema operativo podrá usar el hyperthreading para otras tareas no relacionadas.


¿No significaría "subprocesamiento múltiple adecuado" tener un hilo con trabajo que hacer para cada núcleo lógico en lugar de cada núcleo físico ? Si está ejecutando un ciclo cerrado en cada núcleo lógico, el Administrador de tareas debería informar al 100% con hyperthreading. AFAIK, el "porcentaje de uso" en el Administrador de tareas se basa en la cantidad de tiempo que el subproceso en cuestión estuvo en el estado ejecutable y programado en un núcleo lógico, no necesariamente la cantidad de tiempo que estuvo, digamos, haciendo algo en una ALU . El sistema operativo probablemente ni siquiera lo sabría (solo el microcódigo de la CPU lo haría)
Reirab

1
El código de máquina "regular" solo usa de 2 a 3 de los 6 o más puertos de instrucciones en las CPU modernas. Sin mencionar todas las paradas de la tubería causadas por fallas de ramificación y caché. Hyperthreading ayuda a llenar esos vacíos. Casi siempre es una victoria usarlo. Algunos tipos de código no funcionan bien, como la codificación / decodificación de video o las matemáticas de matriz altamente optimizadas. Pero esos son inusuales.
Zan Lynx el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.