/ / Calcular valores propios / vectores propios de cientos de pequeñas matrices usando CUDA - matriz, cuda, opencl, álgebra lineal, métodos numéricos

Calcule valores propios / vectores propios de cientos de matrices pequeñas utilizando CUDA: matriz, cuda, código abierto, álgebra lineal, métodos numéricos

Tengo una pregunta sobre la descomposición propia de cientos de pequeñas matrices usando CUDA.

Necesito calcular los valores propios yvectores propios de cientos (por ejemplo, 500) de matrices simétricas reales pequeñas (64 por 64) al mismo tiempo. Traté de implementarlo por el método de Jacobi usando el pedido de torneos de ajedrez (ver este documento (PDF) para más información).

En este algoritmo, se definen 32 hilos en cadabloque, mientras que cada bloque maneja una matriz pequeña, y los 32 hilos trabajan juntos para inflar 32 elementos fuera de la diagonal hasta la convergencia. Sin embargo, no estoy muy satisfecho con su rendimiento.

Me pregunto dónde hay algo mejoralgoritmo para mi pregunta, es decir, la descomposición propia de muchas matrices simétricas reales de 64 por 64. Supongo que el método del jefe de familia puede ser una mejor opción, pero no estoy seguro de si se puede implementar de manera eficiente en CUDA. No hay mucha información útil en línea, ya que la mayoría de los otros programadores están más interesados ​​en usar CUDA / OpenCL para descomponer uno matriz grande en lugar de muchas matrices pequeñas.

Respuestas

3 para la respuesta № 1

Al menos para los valores propios, se puede encontrar una muestra en el SDK de Cuda

http://www.nvidia.de/content/cudazone/cuda_sdk/Linear_Algebra.html

Las imágenes parecen rotas, pero la descarga de muestras aún funciona. Sugeriría descargar el SDK completo y echar un vistazo a ese ejemplo. Además, este documento podría ser útil:

http://docs.nvidia.com/cuda/samples/6_Advanced/eigenvalues/doc/eigenvalues.pdf