una tipos texto investigacion importancia ejemplo cual caracteristicas argumentos argumento argumentativo argumentar argumentacion c fortran blas

c - tipos - ¿Propósito del argumento LDA en BLAS dgemm?



tipos de argumentacion (3)

La documentación de implementación de referencia de Fortran establece:

* 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, dado m y k, ¿no debería ser capaz de derivar LDA? ¿Cuándo se permite que LDA sea mayor que n (o k)?


El parámetro LDA en BLAS es efectivamente el paso de la matriz tal como 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).


La distinción es 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.


Otra forma de verlo es LDA es el paso en 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.