Alg. МКЛ с резьбой DGEMV

Как все мы, возможно, знаем, существует множество различных способов параллельной реализации DGEMV (по столбцам или по блокам и т. Д.), Что приводит к различным накладным расходам на связь. Я просматривал и MKL, и все справочные руководства для BLAS, чтобы попытаться выяснить, какой стиль обычно вызывается cblas_dgemv из MKL(v.11), но безуспешно. Если у кого-то есть ссылка, которая документирует, какой алгоритм или накладные расходы для используемого алгоритма, я был бы очень рад.

1 ответ

Справочные руководства MKL сохраняют DGEMV, а также другие процедуры как черные ящики.

Но я думаю, что есть еще способ оценить накладные расходы / эффективность.

Как мы знаем, DGEMV - это операция с ограниченной пропускной способностью. Для y += A*x вы можете измерить его скорость по достигнутой ширине полосы памяти:

  1. измерить время выполнения одного вызова DGEMV как t;
  2. рассчитать общий размер записи / чтения: m = 2*len(y)+len(x)+len(A);
  3. фактическая пропускная способность bw = m/t;
  4. проверить пиковую пропускную способность всей оперативной памяти системы bw0;

затем bw/bw0*100% можно рассматривать как фактическую эффективность алгоритма.

Обратите внимание, что вам может потребоваться достаточно большая матрица / вектор для измерения. Также, если вы хотите повторить измерение, чтобы получить более точный результат, вам может потребоваться сохранить кэш-память холодной перед началом новой итерации.

Другие вопросы по тегам