我编写了一个脚本来测量GFLOPS,我可以期望在Octave中进行逐元素矩阵乘法。我的CPU是i7-2670QM @ 2.2GHz。看spec理论GFLOPS是70.4。运行下面的脚本只使用我系统的四个核心之一,我测量了185 GFLOPS。
1;
n = 4096;
x = rand(n, n);
tic, x = x .* x;
y = toc
printf('GFLOPS: %f\n', n * n / y / 1e6);
启动Ocatve并运行脚本(mult.m):
octave:1> mult
y = 0.090080
GFLOPS: 186.247910
该脚本在0.09秒内执行4096 * 4096次双精度乘法(FLOPS),即186 GFLOPS。这比理论上的70.4 GFLOPS大得多。有什么问题?
运算符。*是元素乘法,如您所见:
octave:1> a = [1, 2; 3, 4];
octave:2> b = [2, 3; 4, 5];
octave:3> a .* b
ans =
2 6
12 20
因此,我希望n²乘法。
答案 0 :(得分:2)
你正在测量M(ega)FLOPS(1e6),而不是G(iga)FLOPS(1e9)