2011-11-21 4 views
31

Los estados de documentación Fortran implementación de referencia:¿Propósito del argumento LDA en BLAS dgemm?

* LDA - INTEGER. 
*   On entry, LDA specifies the first dimension of A as declared 
*   in the calling (sub) program. When TRANSA = 'N' or 'n' then 
*   LDA must be at least max(1, m), otherwise LDA must be at 
*   least max(1, k). 
*   Unchanged on exit. 

Sin embargo, dada M y K ¿No debería poder derivar LDA? ¿Cuándo se permite que LDA sea mayor que n (o k)?

Respuesta

19

La distinción se encuentra entre el tamaño lógico de las primeras dimensiones de las matrices A y B y el tamaño físico. El primero es el tamaño de la matriz que está utilizando, el segundo es el valor en la declaración o la cantidad física de memoria utilizada. Dado que Fortran es un lenguaje de columna principal, los tamaños declarados de todos los índices, excepto el último, deben conocerse para calcular la ubicación de un elemento de matriz. Observe las declaraciones de estilo de FORTRAN 77 de "A (LDA, ), B (LDB,), C (LDC, *)". El tamaño declarado de la matriz puede ser mayor que la porción que está utilizando; por supuesto, no puede ser más pequeño.

32

El parámetro LDA en BLAS es efectivamente el paso de la matriz, ya que se presenta en la memoria lineal. Es perfectamente válido tener un valor de LDA que sea mayor que la dimensión principal de la matriz que se está operando. Los casos típicos en los que es útil o necesario utilizar un valor de LDA mayor son cuando se opera en una matriz secundaria de una matriz de mayor densidad y cuando el hardware o los algoritmos ofrecen ventajas de rendimiento cuando el almacenamiento se rellena en múltiplos redondos de algún tamaño óptimo (líneas de caché o tamaño de transacción de la memoria GPU, o balance de carga en implementaciones multiprocesador, por ejemplo).

4

Otra forma de verlo es LDA es el paso y, lo que significa que en un diseño de fila mayor su dirección para el elemento A [y, x] se calcula como x + LDA * y. Para un diseño de memoria "empaquetada" sin espacios entre líneas adyacentes de x-data LDA = xSize.

Cuestiones relacionadas