2012-08-06 12 views
9

Estoy empezando a aprender C++ AMP y he obtenido algunos ejemplos que he creado con VS 2012 RC, pero estoy descubriendo que el rendimiento de la GPU es más lento que la CPU. Por ejemplo, los ejemplos de Kate Gregory: http://ampbook.codeplex.com/releases/view/90595 (relevante para su próximo libro http://www.gregcons.com/cppamp/). Ellos fueron demostrados por ella en una conferencia. Observé dónde obtuvo una mejora de rendimiento de ~ 5x para el ejemplo del capítulo 4 usando la GPU de su computadora portátil (creo que dijo que era una 6650) en comparación con la CPU (no estoy seguro de qué CPU tenía). He intentado probar el ejemplo yo mismo y en un par de configuraciones del sistema (como a continuación). Siempre he encontrado que la CPU es más rápida. También probé otros ejemplos y encontré lo mismo. ¿Estoy haciendo algo mal? ¿Hay alguna razón para el rendimiento más lento de lo esperado? ¿Alguien tiene un ejemplo que definitivamente mostraría que la GPU es más rápida?C++ AMP con GPU rápidas más lentas que la CPU

  • Sistema 1: Intel 2600K i7 con gráficos integrados (espero que esto sea más lento)
  • Sistema 2: Intel 2630QM i7 con Intel HD conmutable con AMD 6770 (lo tengo funcionando en el modo de rendimiento, por lo que debería ser el uso de la 6770)
  • Sistema 3: Intel i5 750 con 2xCrossfire AMD HD 5850

Ejemplo de resultados: los resultados del proyecto en CAPÍTULO4 1.15ms CPU, GPU 2.57ms, 2.55ms GPU de baldosas.

Editar:

Doh, creo que acabo de encontrar la razón por la cual - los valores para el tamaño de las matrices se utilizan en la conferencia eran diferentes. La muestra en el sitio web usa M = N = W = 64. Si utilizo 64, 512 y 256 como lo hizo en la conferencia, obtengo el correspondiente aumento de ~ 5x en el rendimiento.

+0

Me pregunto si [Kate Gregory] (http://stackoverflow.com/users/203458/kate-gregory) está leyendo esto. –

+1

Si lo lee Kate, entonces creo que sería bueno actualizar el código en línea para usar los tamaños de matriz utilizados en la conferencia (http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV334) - Estaba pensando que había algún problema con mi VS o la configuración del proyecto en cuanto a por qué no veía ninguna mejora :) – CarbonTwelve

+4

¿Por qué la gente vota para cerrar esto como "fuera de tema"? ¿Qué pasa con C++ AMP, CPU, GPU y Visual Studio "fuera de tema" para Stack Overflow? –

Respuesta

7

Parece que su pregunta principal es POR QUÉ mover cosas a la GPU no siempre le da un beneficio. La respuesta es el tiempo de copia. Imagine un cálculo que lleva un tiempo proprotional a n al cuadrado. La copia toma un tiempo proporcional a n. Es posible que necesite un n bastante grande antes de pasar el tiempo para copiar hacia y desde la GPU que se ve superado por el tiempo ahorrado haciendo el cálculo allí.

El libro menciona esto brevemente en los primeros capítulos, y los capítulos 7 y 8 tratan sobre el rendimiento y la optimización. El Capítulo 7 está en Rough Cuts ahora; El Capítulo 8 debería estar allí en breve. (Su código ya está en Codeplex: el estudio de caso de Reducción).

Acabo de registrar una actualización del código del Capítulo 4 que usa los números de inicio de Tech Ed en lugar de los que estaban allí antes. Las matrices más pequeñas pierden demasiado tiempo para la copia hacia/desde la GPU; las más grandes tardan demasiado en ser una buena demostración. Pero siéntase libre de jugar con los tamaños. Hazlos aún más grandes ya que no te importa un minuto o dos de "aire muerto", y mira qué pasa.

+1

Soy consciente del costo del tiempo de copia, mi pregunta era básicamente por qué el código era el uso no estaba replicando los resultados con aproximadamente la misma plataforma. Resulta que el código no era idéntico, y esta es la razón. Gracias por actualizar el código. – CarbonTwelve

Cuestiones relacionadas