¿Podría el hilo contarse como una CPU?

¿Podría el hilo contarse como una CPU?

Entonces escribí lscpuen mi terminal y vi esto:

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

El no. de CPU(s) es 4 aquí debido a la fórmula: No. of CPUs = Sockets X Cores per socket X Threads per Core

Pero la pregunta es ¿qué es exactamente una CPU? ¿Por qué incluimos hilos en la fórmula anterior?

Respuesta1

Depende de lo que estés buscando.

Cuando compra un procesador, dice claramente sobre el hiperproceso y la cantidad de núcleos, y si puede usarlo en modo multiprocesador (múltiples sockets).

Olvidemos los casos en los que tenemos varias CPU físicas.

Tenemos en un chip varios núcleos: pueden compartir algo de caché; de lo contrario, son casi independientes. Pero aún así: algunas tareas deben coordinarse, por lo que con 4 núcleos, no tienes (normalmente) 4 veces la "potencia" de 1 solo núcleo.

Hyperthreads: esto es más complicado: era un truco de Intel (también antes de los múltiples núcleos), allí puedes simular múltiples CPU. En realidad, solo puede ejecutar un subproceso a la vez, pero la CPU a menudo necesita hacer pausas (por ejemplo, esperar acceso a la memoria o escribir). Con hyperthreading, la CPU podría cambiar rápidamente a la segunda CPU virtual.

Entonces, con hyperthreading, a menudo se obtiene un mejor rendimiento en comparación con una sola CPU normal, casi sin costo (algo más de lógica, caché y registros, pero sin transistores duplicados), pero dos núcleos siguen siendo mejores (todavía no son iguales a dos CPU, pero en cálculo numérico, donde las dos tareas son completamente independientes y el kernel no molestará a las tareas).

Si tiene procesos paralelos, a menudo usaría los subprocesos multiplicados por núcleos (y a menudo agrego uno a los subprocesos o resultados finales, si hay un número discreto de IO). En este caso, obtienes un mejor rendimiento (suponiendo que no haya otras tareas que requieran un uso intensivo de la CPU): utilizas la máxima potencia, también cuando un solo núcleo está esperando datos de la memoria.

Pero para acelerar, solo usaría la cantidad de núcleos (recordando que tendré algunos datos mejores).

Entonces, depende de lo que estés buscando. Y si estás realizando tareas complejas, probablemente estés midiendo mucho más tus procesos, y optimizándolos (caché, memoria, subprocesos, núcleos, CPU, MPI,…). Cada programa es diferente en cuanto a recursos.

información relacionada