Multithreading 阿尔格。MKL螺纹DGEMV

Multithreading 阿尔格。MKL螺纹DGEMV,multithreading,algorithm,intel,blas,intel-mkl,Multithreading,Algorithm,Intel,Blas,Intel Mkl,我们都知道,并行实现DGEMV有很多不同的方法(列或块等),导致不同的通信开销。我一直在查阅MKL和BLAS的所有参考手册,试图找出cblas_dgemv在MKL(第11节)中通常采用的风格,但没有成功。如果任何人有一个参考文件记录了所使用的算法或算法的开销,我将非常高兴。MKL ref手册将DGEMV以及其他例程作为黑匣子保存 但我认为仍然有一些方法可以估计开销/效率 正如我们所知,DGEMV是一种mem带宽受限的操作。 对于y+=A*x,可以通过获得的mem带宽测量其速度: 测量一次DGEM

我们都知道,并行实现DGEMV有很多不同的方法(列或块等),导致不同的通信开销。我一直在查阅MKL和BLAS的所有参考手册,试图找出cblas_dgemv在MKL(第11节)中通常采用的风格,但没有成功。如果任何人有一个参考文件记录了所使用的算法或算法的开销,我将非常高兴。

MKL ref手册将DGEMV以及其他例程作为黑匣子保存

但我认为仍然有一些方法可以估计开销/效率

正如我们所知,DGEMV是一种mem带宽受限的操作。 对于y+=A*x,可以通过获得的mem带宽测量其速度:

  • 测量一次DGEMV调用的运行时间,如
    t
  • 计算总内存读/写大小:
    m=2*len(y)+len(x)+len(A)
  • 实际带宽
    bw=m/t
  • 查看整个系统RAM的峰值带宽
    bw0
    那么
    bw/bw0*100%
    可以看作是该算法的实际效率

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