编写这段代码的初衷是测量整个数组由函数操作而不是操作数组的各个元素时的性能差异.
即比较以下两个陈述:
function_vector(x, y, z, n);
Run Code Online (Sandbox Code Playgroud)
VS
for(int i=0; i<n; i++){
function_scalar(x[i], y[i], z[i]);
}
Run Code Online (Sandbox Code Playgroud)
function_*一些实质但相同的计算在哪里.
随着-ffast-math开机后,标版本大约是2倍快上我已经测试在多台机器.
然而,令人费解的是两台不同机器上的时序比较,两者都使用gcc 6.3.0:
# on desktop with Intel-Core-i7-4930K-Processor-12M-Cache-up-to-3_90-GHz
g++ loop_test.cpp -o loop_test -std=c++11 -O3
./loop_test
vector time = 12.3742 s
scalar time = 10.7406 s
g++ loop_test.cpp -o loop_test -std=c++11 -O3 -ffast-math
./loop_test
vector time = 11.2543 s
scalar time = 5.70873 s
# on mac with Intel-Core-i5-4258U-Processor-3M-Cache-up-to-2_90-GHz
g++ loop_test.cpp -o loop_test -std=c++11 -O3
./loop_test
vector time = 2.89193 s
scalar …Run Code Online (Sandbox Code Playgroud)