我试图测量Fortran中不同矩阵向量乘法方案的差异。我实际编写了以下代码:http://pastebin.com/dmKXdnX6
“优化版本”旨在通过交换循环来访问矩阵元素来尊重矩阵的内存布局。提供的代码应该使用gfortran进行编译,并运行以下相当令人惊讶的结果:
Vectors match! Calculations are OK.
Optimized time: 0.34133333333333332
Naive time: 1.4133333333333331E-002
Ratio (t_optimized/t_naive): 24.150943396226417
我可能犯了一个令人尴尬的错误,但我无法发现它。 我希望别人可以帮助我。
我知道fortran提供了优化版本,但我只是出于好奇而对此进行测量。
先谢谢。
答案 0 :(得分:2)
嗯,这是一个简单的paranthesis问题:
t_optimized = t2-t1/iterations
肯定是错的......你可能意味着
t_optimized = (t2-t1)/iterations
有了这个我加速了~2。
我需要纠正/调整的其他几件事:
A(j,i) = (-1.0)**(i-j)
do i = 1,iterations
call optimized(A, m, n, x, y1)
x(1:n) = y1
end do
(和y2
相同)。不要忘记在每个基准测试开始时重新初始化x
。
;
那么多 - 除非你想在一行上放置多个语句,否则不需要它