Desde el punto de vista de la supercomputación, es mejor no pensar en la carga de la CPU / GPU en porcentaje, sino determinar cuántas operaciones necesita su problema en cuestión y luego compararlo con el rendimiento máximo del sistema.
Si obtiene un 100% de utilización de la CPU, no necesariamente significa que obtendrá todo el rendimiento del sistema. Las CPU a menudo pueden hacer varias cosas diferentes al mismo tiempo, digamos una división y una adición. Si puede comenzar la división temprano, posiblemente se puede superponer con la adición. Su CPU de escritorio probablemente tenga una unidad fuera de servicio que reordenará las declaraciones para beneficiarse de tales superposiciones. O si tienes el siguiente programa:
if (expr1)
expr2;
else
expr3;
Una CPU reordenada intentará calcular las tres expresiones al mismo tiempo y luego descartará el resultado de una de ellas. Esto lo hace más rápido en general. Si tiene algún bloqueador en su programa y no puede reordenar, entonces está utilizando menos carriles en la CPU, pero probablemente todavía mostrará el 100%.
Entonces tiene características SIMD en las CPU que son operaciones vectoriales. Es como GPGPU-light en el sentido de que generalmente solo tiene cuatro u ocho operaciones al mismo tiempo, las GPU hacen 32 o 64. Sin embargo, debe usar eso para arrancar los FLOPS.
Cosas como el intercambio falso pueden generar un alto costo de sincronización que generalmente aparece como carga del kernel en Linux. La CPU se usa por completo, pero no tiene un rendimiento muy útil.
He hecho algo de programación en una máquina IBM Blue Gene / Q. Tiene muchos niveles de jerarquía ( esquema de Blue Gene / L obsoleto ) y, por lo tanto, es difícil de programar de manera eficiente. Tendrá que usar la jerarquía completa hasta SIMD y SMT (Intel llama a esto HyperThreading) para obtener el rendimiento.
Y luego la red a menudo te limita. Por lo tanto, resulta que es más rápido en tiempo (reloj de pared) calcular cosas en múltiples CPU al mismo tiempo en lugar de comunicarlo a través de la red. Esto pondrá más carga en las CPU y hará que el programa se ejecute más rápido. Pero el rendimiento real del programa no es tan bueno como parece por los números sin procesar.
Si agrega GPU a la mezcla, será aún más difícil organizar todo esto para obtener un rendimiento. Esa será una de las cosas que comenzaré a hacer en mi Tesis de maestría de Lattice QCD en un par de meses.
NO-OP
s al mismo tiempo, lo que hará que ambos tengan una carga del 100%.