Desarrollé una función ingenua para duplicar una imagen horizontal o verticalmente usando CUDA C++.¿Las funciones de NPP no están completamente optimizadas?
Luego me di cuenta de que NVIDIA Performance Primitives Library también ofrece una función para el reflejo de imágenes.
Solo por el bien de la comparación, cronometré mi función contra NPP. Sorprendentemente, mi función superó (aunque por un pequeño margen, pero aún así ...).
Confirmé los resultados varias veces usando el temporizador de Windows, así como CUDA Timer.
Mi pregunta es que: ¿Las funciones NPP no están completamente optimizadas para las GPU NVIDIA?
Estoy usando CUDA 5.0, GeForce GTX460M (Compute 2.1) y Windows 8 para el desarrollo.
¿Cuál fue la diferencia, en porcentaje? Las operaciones de duplicación estarán vinculadas a la memoria y los dispositivos más nuevos son flexibles en cuanto a los tipos de patrones de acceso a la memoria que manejarán de manera eficiente. Una implementación ingenua puede ser casi óptima en dispositivos más nuevos. Tal vez la versión de NPP funcione mejor para dispositivos más antiguos. Puede obtener las estadísticas de ancho de banda de memoria de su kernel desde el generador de perfiles y compararlas con el máximo para su dispositivo. –
He probado en 4 tipos de imágenes y 2 tamaños diferentes. 8 bit, 16 bit, 1 canal, 3 canales, (1280 x 720), (1920 x 1080). Obtuve la aceleración máxima en una imagen de tamaño de canal único de 16 bits (1280 x 720), que era un 18,75 por ciento más rápida que la NPP. – sgarizvi
Tiene usted razón de que falta el rendimiento de la central nuclear. Encontré mejores bibliotecas para hacer el procesamiento de imágenes CUDA. Personalmente me gusta la selección de procesamiento de imágenes de ArrayFire y he descubierto que es rápida, http://www.accelereyes.com/arrayfire/c/group__image__mat.htm Otras personas han informado sobre el uso de las características de GPU de OpenCV, aunque no he oído grandes cosas sobre eso. Tunacode en Pakistán también tiene algunas cosas. –