Alg. МКЛ с резьбой DGEMV
Как все мы, возможно, знаем, существует множество различных способов параллельной реализации DGEMV (по столбцам или по блокам и т. Д.), Что приводит к различным накладным расходам на связь. Я просматривал и MKL, и все справочные руководства для BLAS, чтобы попытаться выяснить, какой стиль обычно вызывается cblas_dgemv из MKL(v.11), но безуспешно. Если у кого-то есть ссылка, которая документирует, какой алгоритм или накладные расходы для используемого алгоритма, я был бы очень рад.
1 ответ
Справочные руководства MKL сохраняют DGEMV, а также другие процедуры как черные ящики.
Но я думаю, что есть еще способ оценить накладные расходы / эффективность.
Как мы знаем, DGEMV - это операция с ограниченной пропускной способностью. Для y += A*x вы можете измерить его скорость по достигнутой ширине полосы памяти:
- измерить время выполнения одного вызова DGEMV как
t
; - рассчитать общий размер записи / чтения:
m = 2*len(y)+len(x)+len(A)
; - фактическая пропускная способность
bw = m/t
; - проверить пиковую пропускную способность всей оперативной памяти системы
bw0
;
затем bw/bw0*100%
можно рассматривать как фактическую эффективность алгоритма.
Обратите внимание, что вам может потребоваться достаточно большая матрица / вектор для измерения. Также, если вы хотите повторить измерение, чтобы получить более точный результат, вам может потребоваться сохранить кэш-память холодной перед началом новой итерации.