Mi programa utiliza un número predeterminado de subprocesos que cada uno hace un trabajo independiente. Utilizo la CPU i7-2600 pero apago el módulo de hiper-hilo para que ejecute 4 hilos en 4 núcleos. Cuando ejecuto el programa con 1 subproceso, el uso de la CPU es del 25%, lo que es perfecto ya que 1 subproceso se usa por completo, pero cuando ejecuto 4 o 3 subprocesos solo obtengo un 60% de CPU, ¿por qué?uso de CPU de subproceso múltiple en C#
Como mencioné antes, los hilos son totalmente independientes (no hay bloqueos ni contiendas) también cuando ejecuto el programa 4 veces con 1 hilo obtengo 100% de uso de CPU (es decir, cuando sus 4 procesos de 1 hilo por cada proceso obtengo el uso adecuado de la CPU)
¿Alguna idea?
algo de información más:
- no estoy usando E/S durante el procesamiento de todos los datos necesarios se carga en la memoria, cada hilo carga sus propios datos antes del procesamiento.
- Cargué los datos de una base de datos (utilizando oleDb) pero el problema que estoy describiendo sucede después de la carga mientras se procesan todos los hilos (no se realiza la carga).
- Los números son:
- 2 hilos alrededor del 40% en lugar de 50 (85% para cada hilo).
- 3 hilos alrededor del 50% en lugar de 75 (65% para cada hilo).
- 4 hilos alrededor del 60% en lugar de 100 (60% para cada hilo).
- Uso i7 2600 con memoria de 16GB pero el uso de la memoria en ese proceso no se acerca a eso.
- Ejecuto el monitor de rendimiento de Windows para buscar las diferencias.
¿Estás haciendo el bloqueo de las llamadas de E/S? – ChaosPandion
depende de qué está haciendo cada subproceso y cómo se sincroniza entre ellos y la cantidad de E/S que realiza. Además, en .Net no siempre se obtiene cada subproceso en una nueva CPU – IanNorton
Si son totalmente independientes, probablemente compitan por el ancho de banda de la memoria en bruto. Eso, o espacio en caché. –