ALG。 MKL螺纹DGEMV

时间:2013-01-14 19:38:45

标签: multithreading algorithm intel blas intel-mkl

我们都知道,有很多不同的方法可以并行实现DGEMV(列或块等),从而导致不同的通信开销。我一直在查看MKL和BLAS的所有参考手册,试图找出MKL(v.11)的cblas_dgemv通常调用哪种风格但没有成功。如果有人有一个参考资料来记录正在使用的算法或算法的开销,我会非常高兴。

1 个答案:

答案 0 :(得分:0)

MKL参考手册将DGEMV以及其他例程保留为黑盒子。

但我认为还有一些方法可以估算开销/效率。

众所周知,DGEMV是一个内存带宽限制操作。 对于y + = A * x,您可以通过实现的内存带宽来测量其速度:

  1. 将一个DGEMV呼叫的运行时间测量为t;
  2. 计算总内存读/写大小:m = 2*len(y)+len(x)+len(A);
  3. 实际带宽bw = m/t;
  4. 查看总系统RAM的bw0;
  5. 的峰值带宽

    然后可以将bw/bw0*100%视为算法的实际效率。

    请注意,您可能需要足够大的矩阵/矢量来进行测量。此外,如果您想重复测量以获得更准确的结果,您可能需要在开始新的迭代之前保持缓存冷。