Подтвердить что ты не робот

Цель аргумента LDA в BLAS dgemm?

Справочная документация по реализации Fortran гласит:

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

Однако, учитывая m и k, я не могу получить LDA? Когда LDA разрешено быть больше n (или k)?

4b9b3361

Ответ 1

Различие между логическим размером первых измерений массивов А и В и физическим размером. Первый - это размер используемого массива, второй - значение в объявлении или физический объем используемой памяти. Поскольку Fortran является основным языком столбца, объявленные размеры всех индексов, кроме последнего, должны быть известны для вычисления местоположения элемента массива. Обратите внимание на объявления стиля FORTRAN 77 "A (LDA), B (LDB,), C (LDC, *)". Объявленный размер массива может быть больше, чем часть, которую вы используете; конечно, он не может быть меньше.

Ответ 2

Параметр LDA в BLAS фактически является шагом матрицы, поскольку он выложен в линейной памяти. Совершенно верно иметь значение LDA, которое больше, чем главный размер матрицы, на которой работает. Типичные случаи, когда полезно или необходимо использовать большее значение LDA, - это когда вы работаете на подматрице из более крупной плотной матрицы и когда аппаратные средства или алгоритмы предлагают преимущества производительности при хранении до округлых кратных некоторого оптимального размера ( кеш-строки или размер транзакции памяти GPU или баланс нагрузки в многопроцессорных реализациях, например).

Ответ 3

Другой способ взглянуть на это - это L-шаг, что означает, что в макете строки ваш адрес для элемента A [y, x] вычисляется как x + LDA * y. Для "упакованного" макета памяти без пробелов между соседними строками x-data LDA = xSize.