Bibliotecas de GPU para usar en operaciones de álgebra lineal

8

Estoy buscando bibliotecas de GPU para acelerar un código que tengo, cuyas regiones primarias de "alto rendimiento" tienen descomposición de valores singulares, factorización QR y valores Eigen, cálculo de vectores propios. He revisado el sitio web de Nvidia en sus herramientas como CuBLAS, Magma, etc., pero no quiero escribir el código en Cuda.

Sería maravilloso si hubiera bibliotecas por ahí a las que pueda simplemente "llamar" desde mi código C principal para cosas como SVD, QR, etc., y el cálculo se realizaría en las GPU. En resumen, tengo un código C normal, en el que se aceleran las operaciones intensivas de álgebra lineal. ¿Alguien sabe de una biblioteca de código abierto (preferiblemente) que pueda hacer esto?

Gracias.

atmaere
fuente

Respuestas:

8

Para [CU] BLAS, hay un contenedor llamado 'thunking' en el kit de herramientas CUDA (src / fortran_thunking. {C, h}) que toma punteros de la memoria de la CPU y realiza todas las asignaciones / copias de la GPU por usted. Puede conectarlo a su código con declaraciones de un preprocesador como

#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...

Para LAPACK, Magma tiene interfaces del lado de la CPU para la mayoría, si no todas, de su funcionalidad (tienden a implementarse primero), por lo que, al igual que con el thunking, simplemente intercambia llamadas. En algunos casos, los requisitos de las interfaces o del espacio de trabajo pueden ser un poco diferentes, por lo que querrá ser un poco más cuidadoso que con thunking.

El descargo de responsabilidad necesario es que no hay almuerzo gratis: si no está dispuesto a manejar al menos las copias de memoria explícitamente, su rendimiento se limitará a grandes problemas con alta intensidad computacional (flops / bytes). Si sus problemas son pequeños y / o agrupados, le recomiendo que escriba un código de control para transmitir las copias de memoria y las llamadas de la biblioteca para superponer las copias de memoria y el cálculo. Esto no es realmente CUDA, tanto como una API, ya que no necesita escribir núcleos. Tanto CUBLAS como Magma proporcionan llamadas API para especificar transmisiones.

Max Hutchinson
fuente
4

Karl Rupp, quien escribe ViennaCL ( http://viennacl.sourceforge.net/ ) y está en Computational Sci StackEx, podría intervenir aquí: su biblioteca tiene múltiples descomposiciones de matrices que incluyen SVD, LU, eigendecomp, etc. También es una biblioteca de solo encabezado, y debería funcionar bien con el código C ++ (no estoy seguro sobre C).

Un ejemplo de esto en uso con factorizaciones LU: http://viennacl.sourceforge.net/viennacl-examples-dense-matrix.html .

Jesse Chan
fuente
Ver para su descripción anterior. scicomp.stackexchange.com/questions/376/…
Jesse Chan
Estamos a punto de abrir ViennaCL en lenguajes distintos de C ++. Una interfaz C pura para operaciones BLAS estará disponible con la próxima versión 1.5.0, y más algoritmos de factorización con 1.6.0.
Karl Rupp
3

Es posible que desee echar un vistazo a la biblioteca CULA , que implementa varias de las operaciones LAPACK / BLAS más comunes en precisión simple (edición gratuita) y doble precisión (edición completa, es decir, versión de pago).

La biblioteca funciona como un reemplazo directo para LAPACK / BLAS, por lo que si ya usa estas funciones en su código original, no debería tener que cambiar nada.

Pedro
fuente