Necesitamos calcular matrices de covarianza con tamaños que varían de a . Tenemos acceso a GPU y clústeres, nos preguntamos cuál es el mejor enfoque paralelo para acelerar estos cálculos.100000 × 100000
matrix
parallel-computing
gpu
Abre el camino
fuente
fuente
Respuestas:
Lo primero es reconocer que puedes hacer esto usando BLAS. Si su matriz de datos es (cada x es un vector de columna correspondiente a una medida; las filas son pruebas), entonces puede escribir la covarianza como: C i j = E [ x i , x j ] - E [ x i ] E [ x j ] = 1X= [ x1X2X3. . . ] ∈ Rm × n X
Podemos escribir esto como:
C=1
Sus matrices de datos y resultados pueden ser de alrededor de 64 GB, por lo que no va a caber en un solo nodo o en el valor de un nodo de GPU. Para un clúster que no sea GPU, es posible que desee ver PBLAS , que se siente como scalapack. Para las GPU, las bibliotecas de múltiples nodos aún no están allí. Magma tiene algún tipo de implementación BLAS paralela subyacente, pero puede no ser fácil de usar. No creo que CULA tenga múltiples nodos todavía, pero es algo a lo que hay que prestarle atención. CUBLAS es de nodo único.
También le sugiero que considere implementar el paralelismo usted mismo, especialmente si está familiarizado con MPI y tiene que conectarlo a una base de código existente. De esa manera, puede cambiar fácilmente entre CPU y GPU BLAS y comenzar y terminar con los datos exactamente donde lo desee. No debería necesitar más que unas pocas llamadas MPI_ALLREDUCE .
fuente
Implementé la fórmula dada por @Max Hutchinson con CUBlas y Cuda Thrust y la comparé con las herramientas de cálculo de covarianza en línea. Parece que el mío produce buenos resultados. El siguiente código planeado para QDA Bayes. Entonces la matriz dada puede contener más de una clase. Entonces se calculan las matrices de covarianza múltiple. Espero que sea útil para alguien.
fuente