¿Acelera el código de MATLAB usando GPU?
gpgpu jacket (2)
MATLAB es compatible con la GPU basada en CUDA. Tienes que acceder desde "Parallel Computing Toolbox". Espero que estos 2 enlaces también ayuden:
Características de la caja de herramientas de computación paralela
Características principales
- Bucles for paralelos (parfor) para ejecutar algoritmos de tareas paralelas en procesadores múltiples
- Soporte para GPU NVIDIA con CUDA habilitado
- Uso completo de procesadores multinúcleo en el escritorio a través de trabajadores que se ejecutan localmente
- Grupo de equipos y soporte de red (con MATLAB Distributed Computing Server)
- Ejecución interactiva y por lotes de aplicaciones paralelas
- Conjuntos distribuidos y construcción de datos múltiples de programa único (spmd) para el manejo de grandes conjuntos de datos y algoritmos de datos paralelos
Compatibilidad con MATLAB GPU Computing para NVIDIA CUDA-Enabled GPU
El uso de MATLAB para computación GPU le permite acelerar sus aplicaciones con GPU más fácilmente que con C o Fortran. Con el lenguaje MATLAB familiar usted puede aprovechar la tecnología informática CUDA GPU sin tener que aprender las complejidades de las arquitecturas GPU o las bibliotecas de computación GPU de bajo nivel.
Puede usar GPU con MATLAB a través de Parallel Computing Toolbox , que es compatible con:
- GPU NVIDIA habilitadas para CUDA con capacidad de cálculo 2.0 o superior. Para las versiones 14a y anteriores, la capacidad de cómputo 1.3 es suficiente.
- Uso de GPU directamente de MATLAB
- Funciones de MATLAB habilitadas para GPU como fft, filter y varias operaciones de álgebra lineal
- Funciones habilitadas para GPU en cajas de herramientas : Caja de herramientas de procesamiento de imágenes, Caja de herramientas del sistema de comunicaciones, Caja de herramientas de estadísticas y herramientas, Caja de herramientas de redes neuronales, Caja de herramientas de sistemas de conjuntos phased y Caja de herramientas de procesamiento de señal (Obtenga más información sobre la compatibilidad de GPU para algoritmos de procesamiento de señales)
- Integración kernel CUDA en aplicaciones MATLAB , usando solo una línea de código MATLAB
- Múltiples GPU en el escritorio y clústeres de computadoras que utilizan los trabajadores de MATLAB en Parallel Computing Toolbox y MATLAB Distributed Computing Server
AccelerEyes anunció en diciembre de 2012 que trabaja con Mathworks en el código GPU y ha suspendido su producto Jacket para MATLAB:
http://blog.accelereyes.com/blog/2012/12/12/exciting-updates-from-accelereyes/
Lamentablemente, ya no venden licencias de Jacket.
Por lo que yo entiendo, la solución Jacket GPU Array basada en ArrayFire fue mucho más rápida que la solución gpuArray provista por MATLAB.
Empecé a trabajar con gpuArray, pero veo que muchas funciones se implementan mal. Por ejemplo, un simple
myArray(:) = 0
es muy lento. He escrito algunos CUDA-Kernels personalizados, pero la funcionalidad estándar de MATLAB mal implementada agrega una gran cantidad de gastos generales, incluso si se trabaja con gpuArrays de forma consistente en todo el código. Resolví algunos problemas al reemplazar el código de MATLAB con código CUDA escrito a mano, pero no quiero volver a implementar la funcionalidad estándar de MATLAB.
Otra característica que me falta son las matrices de GPU dispersas.
Entonces mis preguntas son:
¿Cómo se aceleran las implementaciones de GPU predeterminadas mal implementadas proporcionadas por MATLAB? En particular, ¿cómo puedo acelerar las operaciones de matrices dispersas en MATLAB usando la GPU?
Tuve el placer de asistir a una charla de John, el fundador de AccelerEyes. No obtuvieron la aceleración porque simplemente eliminaron el código mal escrito y lo reemplazaron con un código que guardaba algunos bits aquí y allá. Su aceleración se debió principalmente a la explotación de la disponibilidad de la memoria caché y la realización de muchas operaciones en memoria (GPU). Matlab se basó en la transferencia de datos entre la GPU y la CPU, si no recuerdo mal, y por lo tanto la aceleración era una locura.