2012-08-11 22 views
5

Programé el kernel de CUDA por mi cuenta. Compare con el código de la CPU, mi código de kernel es 10 veces más rápido que las CPU.¿Cómo evaluar el rendimiento de CUDA?

Pero tengo una pregunta con mis experimentos.

¿Mi programa se optimiza completamente utilizando todos los núcleos de GPU, el uso adecuado de la memoria compartida, el recuento de registros adecuado, ocupación suficiente?

¿Cómo puedo evaluar el rendimiento de mi código kernel?

¿Cómo calculo el rendimiento máximo de CUDA teóricamente?

¿Tengo razón en que comparar GFLOPS de CPU y GFLOPS de GPU y GFLOPS es un rendimiento teórico transparente de ellos?

Gracias de antemano.

Respuesta

5

¿Mi programa se optimiza completamente utilizando todos los núcleos de GPU, el uso adecuado de la memoria compartida, el recuento de registros adecuado, la ocupación suficiente?

Para averiguarlo, utiliza uno de los perfiladores CUDA. Ver How Do You Profile & Optimize CUDA Kernels?

¿Cómo calculo el rendimiento máximo de CUDA teóricamente?

Que las matemáticas son algo complicadas, diferentes para cada arquitectura y fáciles de obtener incorrectas. Es mejor mirar los números en las especificaciones de tu chip. Hay tablas en Wikipedia, como this one, for the GTX500 cards. Por ejemplo, puede ver en la tabla que un GTX580 tiene un ancho de banda máximo teórico de 192.4GB/sy un rendimiento de procesamiento de 1581.1GFLOP.

¿Tengo razón en que comparar entre CPU's GFLOPS y GPU's GFLOPS y GFLOPS la tasa es el rendimiento teórico transparente de ellos?

Si entiendo correctamente, usted está preguntando si el número de GFLOP máximos teóricos en una GPU se puede comparar directamente con el número correspondiente en una CPU. Hay algunas cosas a considerar cuando se comparan estas cifras:

  • antigua GPU no apoyó doble precisión (DP) de punto flotante, única precisión simple (SP).

  • Las GPU que admiten DP lo hacen con una degradación de rendimiento significativa en comparación con SP. El número de GFLOP que cité arriba fue para SP. Por otro lado, los números cotizados para CPU suelen ser para DP, y hay menos diferencia entre el rendimiento de SP y DP en una CPU.

  • Las cotizaciones de CPU pueden ser para tasas que solo se pueden alcanzar usando instrucciones vectorizadas SIMD (instrucción única, datos múltiples), y normalmente es muy difícil escribir algoritmos que pueden acercarse al máximo teórico (y es posible que tengan que escribirse en asamblea). A veces, las cotizaciones de CPU son para una combinación de todos los recursos informáticos disponibles a través de diferentes tipos de instrucciones y, a menudo, es prácticamente imposible escribir un programa que pueda explotarlos todos simultáneamente.

  • Las tarifas indicadas para las GPU suponen que tiene suficiente trabajo paralelo para saturar la GPU y que su algoritmo no está vinculado al ancho de banda.

+0

Gracias, Roger. Tu comentario es bueno para mi –

+0

Tengo una pregunta adicional. Supongamos CPU: 2,8 GHz, 1 Core GPU: 1,6 GHz, 384 de núcleo (GTX 560 Ti Spec) En este ejemplo, el rendimiento esperado de CPU es de 2,8 GHz x 1 core = 2,8 GHz · Core rendimiento esperado de GPU es 0.8GHz x 384 core = 307.2 Ghz · Core Este cálculo es válido? –

+2

No se puede medir el rendimiento en GHz. Para encontrar el rendimiento teórico, debe averiguar qué puede hacer la CPU/GPU en cada ciclo de reloj. Y las consideraciones que mencioné anteriormente afectan el rendimiento que puede obtener. Por ejemplo, si observa el rendimiento de un Intel Sandy Bridge, debe tener en cuenta que tiene un conjunto de instrucciones llamado AVX que puede realizar 8 operaciones SP por instrucción. –

3

La medida de rendimiento preferida es el tiempo transcurrido. Los GFLOP se pueden usar como un método de comparación, pero a menudo es difícil compararlos entre compiladores y arquitecturas debido a las diferencias en el conjunto de instrucciones, la generación de código de compilación y el método de conteo de FLOP.

El mejor método es medir el rendimiento de la aplicación. Para el código CUDA, debe sincronizar todo el código que se producirá por lanzamiento. Esto incluye copias de memoria y sincronización.

Nsight Visual Studio Edition y Visual Profiler proporcionan la medición más precisa de cada operación. Nsight Visual Studio Edition proporciona ancho de banda teórico y valores de FLOP para cada dispositivo. Además, el experimento Achieve FLOPs se puede utilizar para capturar el conteo FLOP tanto para la precisión simple como para la doble.

+0

Compruebo el rendimiento de la CPU y la GPU utilizando el tiempo transcurrido. Mi pregunta es que la tasa de diferencia de ellos es 10 veces entre la CPU y la GPU. Pero, ¿puedo decir que 10 veces (tasa) es el mejor rendimiento? ¿Si es así por qué? Si no, ¿por qué? Esa es mi pregunta ... –