众所周知,有很多不同的方法可以并行实现 DGEMV(按列或按块等),从而导致不同的通信开销。我一直在查看 MKL 和 BLAS 的所有参考手册,试图找出 cblas_dgemv 通常从 MKL(v.11) 调用哪种样式但没有成功。如果有人有参考文献记录了正在使用的算法或算法的开销,我会非常高兴。
问问题
320 次
1 回答
0
MKL 参考手册将 DGEMV 以及其他例程保留为黑匣子。
但我认为仍有一些方法可以估计开销/效率。
众所周知,DGEMV 是一个内存带宽有界的操作。对于 y += A*x,您可以通过实现的内存带宽来衡量其速度:
- 测量一个 DGEMV 调用的运行时间为
t
; - 计算总内存读/写大小:
m = 2*len(y)+len(x)+len(A)
; - 实际带宽
bw = m/t
; - 检查整个系统 RAM 的峰值带宽
bw0
;
那么bw/bw0*100%
可以看做算法的实际效率。
请注意,您可能需要足够大的矩阵/向量来进行测量。此外,如果您想重复测量以获得更准确的结果,您可能需要在开始新的迭代之前保持缓存冷。
于 2013-01-14T20:40:42.187 回答