我正在编写一个 C++ 程序,用于求解网络上的偏微分方程和代数方程。Eigen 库承担了大部分工作,通过 LU 分解求解许多稀疏线性系统。
由于性能总是很好,因此我尝试了多种选择。我在用着
g++ -O3 -DNDEBUG -flto -fno-fat-lto-objects -std=c++17
Run Code Online (Sandbox Code Playgroud)
作为与性能相关的编译器选项。然后我添加了-march=native选项,发现执行时间平均增加了大约 6%(通过 gnu time 进行测试,每个配置的样本大小约为 10 次运行。两种设置几乎没有差异)。
这种观察的可能(或最好可能)原因是什么?
我想 lscpu 的输出在这里可能有用,所以就是这样:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 78
Model name: Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
Stepping: …Run Code Online (Sandbox Code Playgroud)