我们都知道,有很多不同的方法可以并行实现DGEMV(列或块等),从而导致不同的通信开销。我一直在查看MKL和BLAS的所有参考手册,试图找出MKL(v.11)的cblas_dgemv通常调用哪种风格但没有成功。如果有人有一个参考资料来记录正在使用的算法或算法的开销,我会非常高兴。
答案 0 :(得分:0)
MKL参考手册将DGEMV以及其他例程保留为黑盒子。
但我认为还有一些方法可以估算开销/效率。
众所周知,DGEMV是一个内存带宽限制操作。 对于y + = A * x,您可以通过实现的内存带宽来测量其速度:
t
; m = 2*len(y)+len(x)+len(A)
; bw = m/t
; bw0
; 然后可以将bw/bw0*100%
视为算法的实际效率。
请注意,您可能需要足够大的矩阵/矢量来进行测量。此外,如果您想重复测量以获得更准确的结果,您可能需要在开始新的迭代之前保持缓存冷。