2011-10-16 19 views
9

Estoy haciendo algunos cálculos y haciendo algunos análisis sobre las fuerzas y la debilidad de las diferentes implementaciones de BLAS. sin embargo, he encontrado un problema.¿Cómo transponer una matriz de manera óptima usando blas?

Estoy probando cuBlas, hacer linAlg en la GPU parecería una buena idea, pero hay un problema.

Implementación de cuBlas utilizando el formato de columna principal, y dado que esto no es lo que necesito al final, tengo curiosidad si hay una forma de hacerlo con uno puede hacer que BLAS haga la transposición de matriz?

+1

".... y ya que esto no es lo que al final .....". ¿Falta un par de palabras? – talonmies

+2

A partir de CUDA 5.0, cuBLAS tiene 'cublas geam' que es una rutina muy eficiente para realizar la transposición de matrices. Para obtener un código completo que implemente esta solución y compare el rendimiento con la transposición de matrices utilizando Thrust, consulte [¿Cuál es la forma más eficiente de transponer una matriz en CUDA?] (Http://stackoverflow.com/questions/15458552/what-is- la forma-más-eficiente-de-transponer-a-matriz-en-cuda/21803459 # 21803459). – JackOLantern

Respuesta

10

BLAS no tiene una rutina de transposición de matriz integrada. El SDK de CUDA incluye un ejemplo de transposición de matriz con un documento que describe la estrategia óptima para realizar una transposición. Su mejor estrategia es probablemente usar entradas principales de fila a CUBLAS con la versión de entrada transpuesta de las llamadas, luego realizar los cálculos intermedios en la columna principal, y finalmente realizar una operación de transposición usando el kernel SDK transpose.


Editado añadir que CUBLAS añadió una rutina de transposición en CUBLAS la versión 5, geam, que puede realizarse la transposición de la matriz en la memoria de la GPU y deben ser considerados como óptimos para cualquier arquitectura que está utilizando.

Cuestiones relacionadas