Mi programa:100% basado en CPU y RAM, realizacalculos matematicos, lee los datos del HDD en la RAM al principio.No hay comunicación entre hilos.Los hilos, todos toman elMismo tiempotambién (casi).
Pregunta:
Si mi programa utiliza subprocesos iguales a la cantidad de subprocesos de la CPU, ¿qué tipo de rendimiento puedo esperar de un sistema de 2 CPU?
Digamos que uso dos xeons de 8 núcleos, cada uno con 16 subprocesos, por lo que 16x2 = 32 subprocesos en total. Si mi programa utiliza 32 subprocesos, todos con un uso del 100%, ¿obtendré el doble de rendimiento que con una sola CPU?
Respuesta1
Realmente la mejor respuesta que puedes dar es "probablemente no, pero depende". Tienes el doble de potencia bruta de CPU disponible, pero:
Realmente no tendrás el doble de ancho de banda de memoria utilizable.
Tomará tiempo hacer "ping pong" en algunas líneas de caché entre las CPU.
A veces un hilo tendrá que esperar por otro y cuantos más hilos tengas, más sucederá.
A veces, aunque tengas mucho trabajo que hacer, no puedes hacerlo todo a la vez.
Etcétera.
En casos muy raros, puedes conseguirmásmás del doble del rendimiento. Si una operación tiene caché limitada, tener más núcleos puede significar que el subproceso puede ejecutarse por más tiempo (porque el núcleo no tendrá otras cosas que hacer porque los otros núcleos las están haciendo), permitiendo que las cachés de la CPU se mantengan activas por más tiempo.
Respuesta2
La respuesta definitiva a las preguntas sobre rendimiento es: ¡no lo adivines, pruébalo!
Respuesta3
Parece que estás trabajando en unvergonzosamente paralelotarea informática, en cuyo caso la respuesta es sí, su rendimiento escalará casi linealmente con el total de subprocesos de CPU utilizados.