Soy bastante nuevo en la programación de GPU, pero debido a que tengo una tarea computacionalmente intensiva, he recurrido a la GPU para obtener posibles mejoras de rendimiento.ArrayFire versus programación cruda CUDA?
He intentado reescribir mi programa con la versión ArrayFire Free. De hecho es más rápido que mi rutina de CPU con multi-threading habilitado, pero no en el grado esperado (es decir, < 100% de aceleración), y los resultados devueltos no son correctos (< 1% de error en comparación con la rutina de la CPU, suponiendo los resultados de la rutina de la CPU son correctos).
Mi tarea es principalmente operaciones de matemática float-32 con elementos en matrices grandes (tamaño 300MB-500MB), con pocos if-thens/switch-cases etc. Supongo que el cuello de botella de rendimiento es probablemente el ancho de banda entre CPU y GPU memoria ya que hay mucha lectura de datos, etc. La GPU que probé es una GeForce 580GTX con 3 GB de memoria de video.
¿Todavía hay espacio significativo para la optimización si escribo código CUDA sin procesar (con CUBLAS, etc., y la optimización promedio) en lugar de usar ArrayFire para mi tarea? Leí algunas guías de optimización de NVIDIA; parece que hay algunos trucos de acceso a la memoria para un acceso más rápido a los datos y para reducir los conflictos bancarios. ¿ArrayFire usa estos trucos generales automáticamente o no?
¿No cumplen ambas con las especificaciones IEEE? Asumo que usar 'Single Precision' en ambos debería dar el mismo resultado. De nuevo, suponiendo que el orden del cálculo sea el mismo también. – Royi