48 votes

But de l'argument LDA dans BLAS dgemm ?

La documentation de l'implémentation de référence Fortran indique :

*  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.

Cependant, étant donné m et k, ne devrais-je pas être capable de dériver LDA ? Quand le LDA est-il autorisé à être plus grand que n (ou k) ?

44voto

talonmies Points 41460

Le paramètre LDA dans BLAS est effectivement le pas de la matrice telle qu'elle est disposée dans la mémoire linéaire. Il est parfaitement valide d'avoir une valeur LDA qui est plus grande que la dimension principale de la matrice sur laquelle on opère. Les cas typiques où il est utile ou nécessaire d'utiliser une valeur LDA plus grande sont ceux où vous opérez sur une sous-matrice à partir d'une matrice dense plus grande, et lorsque le matériel ou les algorithmes offrent des avantages en termes de performances lorsque le stockage est complété par des multiples arrondis d'une certaine taille optimale (lignes de cache ou taille de transaction de la mémoire du GPU, ou équilibre de la charge dans les implémentations multiprocesseurs, par exemple).

23voto

M. S. B. Points 19509

La distinction se fait entre la taille logique des premières dimensions des tableaux A et B et la taille physique. La première est la taille du tableau que vous utilisez, la seconde est la valeur dans la déclaration, ou la quantité physique de mémoire utilisée. Le Fortran étant un langage à colonnes, les tailles déclarées de tous les indices, à l'exception du dernier, doivent être connues pour calculer l'emplacement d'un élément du tableau. Remarquez les déclarations de style FORTRAN 77 de "A(LDA, ),B(LDB, ),C(LDC,*)". La taille déclarée du tableau peut être plus grande que la partie que vous utilisez ; bien sûr, elle ne peut pas être plus petite.

9voto

Andrei Pokrovsky Points 101

Une autre façon de voir les choses est que LDA est la stride y, ce qui signifie que dans une disposition à rangée majeure, votre adresse pour l'élément A[y,x] est calculée comme x+LDA*y. Pour une disposition de mémoire "emballée" sans espaces entre les lignes adjacentes de données x, LDA=xSize.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X