0

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

4

1 回答 1

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

那么bw/bw0*100%可以看做算法的实际效率。

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

于 2013-01-14T20:40:42.187 回答