Problema

Estoy tratando de calcular el rendimiento de CPU / GPU FLOPS pero no estoy seguro de si lo estoy haciendo correctamente .

Digamos que tenemos:

  • Una CPU Kaby Lake (reloj: 2.8 GHz, núcleos: 4, subprocesos: 8)
  • Una GPU Pascal (reloj: 1,3 GHz, núcleos: 768).

Esta página Wiki dice que las CPU de Kaby Lake calculan 32 FLOPS (FP32 de precisión simple) y tarjetas Pascal calculan 2 FLOPS (FP32 de precisión simple), lo que significa que podemos calcular su rendimiento total de FLOPS usando las siguientes fórmulas:

CPU:

TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS 

GPU:

TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS 

Preguntas

  1. [SOLUCIONADO] La mayoría de las guías que» he visto (como esta) utilizan núcleos físicos en la fórmula. Lo que no entiendo es por qué no usar hilos (núcleos lógicos) en su lugar? ¿No se crearon subprocesos específicamente para duplicar el rendimiento de los cálculos de punto flotante? ¿Por qué los ignoramos entonces?

  2. [SOLUCIONADO] ¿Lo estoy haciendo correctamente? No pude encontrar una sola fuente confiable para calcular FLOPS, toda la información en Internet es contradictoria. Para la CPU i7 7700HQ Kaby Lake, encontré valores de FLOPS tan bajos como 29 GFLOPS a pesar de que la fórmula anterior nos da 358 GFLOPS. No sé qué creer.

  3. ¿Existe una biblioteca multiplataforma (Win, Mac, Linux) en Node.js / Python / C ++ que solo devuelve todos los ¿Estadísticas de GPU como núcleos de sombreado, reloj, conjuntos de instrucciones disponibles (o valores FP32, FP64 FLOPS) para poder calcular el rendimiento teórico máximo yo mismo? Es bastante ridículo que no podamos obtener las estadísticas FLOPS directamente de la CPU / GPU, en su lugar tienes que descargar y analizar una página wiki para obtener el valor. Incluso cuando usamos C ++, parece (no lo sé) que tenemos que descargar el kit de herramientas CUDA de 2 GB solo para acceder a la información básica de la GPU de Nvidia, como la cantidad de núcleos, lo que haría prácticamente imposible crear la aplicación. disponible para otros, ya que nadie descargaría una aplicación de 2 GB.

Comentarios

  • Como respuesta parcial, cree que lo que está llamando » hilos » es un truco que permite que un núcleo aloje lo que parecen dos hilos a la vez (hiper -threading) mientras que solo es real tener un núcleo físico real para computar. No estoy completamente seguro acerca de los detalles de cómo Intel hizo esto, pero creo que tiene que ver con llenar los agujeros en las tuberías y demás. Esto, en principio, no sucederá si está computando algo pesado, pero para muchos casos de uso más comunes para un sistema operativo de escritorio, esto tiene sentido. Si está interesado en el rendimiento real de cómputo, aunque esto generalmente no es co unted.
  • @KyleMandli gracias por la aclaración, supongo que tiene sentido
  • Una parte del cálculo propuesto es la frecuencia. Supongo que sabe que con el hardware moderno, no existe la frecuencia. La frecuencia de funcionamiento diferirá según la temperatura y el consumo de energía (por ejemplo, la mayoría de las GPU), o el uso y la utilización del conjunto de instrucciones (por ejemplo, la mayoría de las CPU x86) y posiblemente todos los factores mencionados.
  • Usted ‘ tendremos que reemplazar MHz en todas partes por GHz.
  • No hay ‘ s una sola » rendimiento » real. Por ejemplo, al multiplicar matrices grandes en GPU Volta, mi » real » rendimiento es cercano al teórico, 90 Tops / segundo. Mientras tanto, entrena resnet-50, ‘ es más como 20 Tops / segundo – medium.com/@yaroslavvb/…

Responder

Puede calcular las tasas de GFLOP de esta manera, pero los números son bastante insignificantes en el hardware actual:

  • Las operaciones de punto flotante requieren un número variable de ciclos de reloj. Una suma es generalmente más barata que una multiplicación, pero generalmente toma más de un ciclo de reloj de los 2.8 mil millones de ciclos que necesita.

  • Cuando tiene hyperthreading, tiene dos subprocesos ejecutándose en un núcleo, pero el núcleo aún tendrá solo uno unidad de suma de punto flotante, por lo que los dos subprocesos no pueden ejecutar adiciones de punto flotante al mismo tiempo.

  • Las operaciones de punto flotante consumen mucha energía y la energía se convierte en calor. Cuando hace muchos FLOP, los procesadores se sobrecalientan y reducen sus frecuencias de reloj.

  • Si usa las instrucciones correctas, puede realizar operaciones de multiplicación-suma (FMA) de punto flotante que hacen que una multiplicación y suma sea más rápida que realizar estas operaciones por separado.

  • De manera similar, con las instrucciones SIMD, un núcleo puede realizar la misma operación en varios datos al mismo tiempo; digamos, sumar cuatro pares de números de punto flotante juntos, lo que produce 4 FLOP al mismo tiempo. Pero esto requiere tener un problema en el que un algoritmo realmente requiera que esto suceda, en lugar de usar los resultados de la primera adición en la segunda. Como consecuencia, las instrucciones SIMD solo contribuyen a la velocidad con la que algunos algoritmos pueden ejecutarse, pero no otros.

  • Lo más importante es que generalmente desea realizar operaciones con datos de la memoria, pero mover datos de la memoria principal al procesador lleva mucho más tiempo que realizar cualquier operación en los datos, como un factor de 100 más (orden de magnitud). Por lo tanto, generalmente no ve ni una pequeña fracción del rendimiento teórico de punto flotante de los procesadores en aplicaciones reales: generalmente, sustancialmente menos del 10% del rendimiento máximo teórico.

En otras palabras, calcular el rendimiento máximo se ha convertido en una especie de negocio sin sentido: no tiene mucho que ver con el rendimiento real de un procesador.

Comentarios

  • También puede discutir cómo las unidades de punto flotante SIMD pueden aumentar el rendimiento máximo teórico.
  • Gracias por sus comentarios, chicos, entiendo esos puntos y entiendo cómo las instrucciones avanzadas los conjuntos afectan el rendimiento del punto flotante. Supongo que ‘ me quedaré con el máximo teórico por ahora. Desearía que hubiera al menos una fórmula que se aproximara al rendimiento real de FLOPS solo desde el momento que la CPU necesita para calcular una función específica.
  • @AlekseyHoffman No hay fórmula, solo medidas. Eso ‘ s por qué la lista TOP 500 se basa en medidas reales de rendimiento, no en el rendimiento máximo teórico.
  • @BrianBorchers Sí, buena idea.

Respuesta

Yoy puede leer en ruso – cómo calcular FLOPS .

GHz no muestra FLOPS. Un procesador con los mismos GHz puede ser mucho más rápido que el otro con los mismos GHz.

P.D. gpu-s » rx 590 » y muy antiguo » r7 250x » tienen casi los mismos GHz. Pero … esto ni siquiera es correcto para comparar su rendimiento)

Comentarios

  • ¡Hola, bienvenido a scicomp! En stackexchange es mejor tener una publicación autónoma (ver aquí ). Por favor, para mejorar la publicación, intente editar la respuesta con la información principal del artículo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *