El pico teórico FLOP / s viene dado por:
El número de núcleos es fácil. La frecuencia promedio debería, en teoría, tener en cuenta cierta cantidad de Turbo Boost (Intel) o Turbo Core (AMD), pero la frecuencia de operación es un buen límite inferior. Las operaciones por ciclo dependen de la arquitectura y pueden ser difíciles de encontrar (8 para SandyBridge e IvyBridge, ver diapositiva 26 ). Es el tema de esta pregunta de desbordamiento de pila , que incluye números para un montón de arquitecturas modernas.
Number of Cores∗Average frequency∗Operations per cycle
Deberá conocer el modelo y el proveedor de las CPU de su máquina. Una vez que tenga eso, puede buscar en el sitio web del proveedor (o tal vez en Wikipedia) la velocidad del reloj, el número de chips / sockets, el número de núcleos por chip, el número de operaciones de coma flotante por ciclo y el ancho del vector de esas operaciones . Entonces, simplemente multiplicas.
Tomemos, por ejemplo, los procesadores Intel Xeon E5-2680 "Sandy Bridge" en Stampede donde trabajo. Las especificaciones son:
Multiplicar esos da 345.6 GF / nodo o 2.2 PF para la parte no acelerada del sistema.
Generalmente pensamos en términos de operaciones de doble precisión (64 bits), porque esa es la precisión requerida para la gran mayoría de nuestros usuarios, pero puede rehacer el cálculo en términos de precisión simple si lo desea. Esto generalmente solo cambia el último factor, digamos 8 SP Flops / instrucción en lugar de 4 DP Flops / inst, pero puede ser muy diferente de eso. Las GPU más antiguas, por ejemplo, solo tenían DP a aproximadamente 1/8 de la tasa de SP. Si alguna vez cita un número para su sistema, debe ser explícito acerca de cuál usó si no es de doble precisión porque la gente supondrá que lo fue, de lo contrario.
Además, si su chip admite instrucciones fusionadas de suma múltiple (FMA) y puede hacerlo a toda velocidad, entonces la mayoría de las personas cuentan esto como 2 operaciones de punto flotante, aunque un contador de rendimiento de hardware podría contarlo como una sola instrucción.
Finalmente, también puede hacer esto para cualquier acelerador que pueda existir en su sistema (como una GPU o Xeon Phi) y agregar ese rendimiento al rendimiento de la CPU para obtener un total teórico.
fuente
Entiendo que solicitó el valor teórico, pero como este código casi siempre es inaccesible para cualquier código real, incluso LINPACK, es posible que desee ejecutar DGEMM (optimizado) para matrices muy grandes. La razón por la que prefiero este método es que expone algunas de las deficiencias de ciertos procesadores que les impiden alcanzar su valor teórico de flop máximo.
Por ejemplo, las GPU NVIDIA actualmente realizan operaciones de enteros y de punto flotante en la misma tubería. Esto significa que solo puede lograr el flop / s máximo teórico si no hace ningún cálculo entero . Como la indexación de matrices y cualquier otra forma de acceso a datos requiere una aritmética de enteros en algún lugar, ningún código puede alcanzar el flop / s máximo teórico en una GPU NVIDIA. En la mayoría de los casos, uno ve ~ 80% como el límite superior. Para las CPU que emiten operaciones enteras y de punto flotante simultáneamente, esto no es un problema.
En algunos procesadores multinúcleo similares a GPU como Intel Knights Corner y Blue Gene / Q, es más difícil lograr el flop / s máximo que en las CPU tradicionales para problemas de canalización similares (aunque ambos pueden alcanzar ~ 90% del pico en DGEMM grande al menos )
fuente