为什么这个cpu运行得更快?
我写了一个c程序,运行在Intel i5-7500(kubuntu和virtualbox在win10下运行)和Intel Xeon E5-26xx v4(tenxun cloud)上。我认为Intel i5-7500会更快(CPU MHz:3.4GHz),但Intel Xeon E5-26xx v4(CPU MHz:2.4GHz)实际上更快。有人能告诉我原因吗为什么这个cpu运行得更快?,c,linux,gcc,cpu,C,Linux,Gcc,Cpu,我写了一个c程序,运行在Intel i5-7500(kubuntu和virtualbox在win10下运行)和Intel Xeon E5-26xx v4(tenxun cloud)上。我认为Intel i5-7500会更快(CPU MHz:3.4GHz),但Intel Xeon E5-26xx v4(CPU MHz:2.4GHz)实际上更快。有人能告诉我原因吗 #include <stdio.h> int main(int argc, const char *argv[]) {
#include <stdio.h>
int main(int argc, const char *argv[]) {
long long s = 0, i = 0;
for (i = 0; i < 12345678900; i++) {
s += i;
}
printf("%lld\n", s);
return 0;
}
结果是
➜ ~ gcc -std=c11 a.c -O2 && time ./a.out
2420917449941559086
./a.out 4.81s user 0.00s system 99% cpu 4.849 total
➜ ~ gcc -std=c11 a.c -O2 && time ./a.out
2420917449941559086
./a.out 7.01s user 0.00s system 99% cpu 7.019 total
英特尔(R)核心(TM)i5-7500 CPU@3.40GHz环境:
➜ ~ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
结果是
➜ ~ gcc -std=c11 a.c -O2 && time ./a.out
2420917449941559086
./a.out 4.81s user 0.00s system 99% cpu 4.849 total
➜ ~ gcc -std=c11 a.c -O2 && time ./a.out
2420917449941559086
./a.out 7.01s user 0.00s system 99% cpu 7.019 total
这种代码在核心i5-7500上应该运行得更快,每次迭代一个时钟周期,并且在单核turbo模式下运行。在3.8 GHz下,预期运行时间约为3.25秒 除非CPU在处理如此短的循环时出现问题(我对此表示怀疑),否则在您的情况下,可能是Windows和Virtualbox开销的组合降低了速度。电源管理配置不正确可能是另一个原因
编辑我发现一个系统具有第7代Core i5 CPU(尽管略有不同),在裸机上,它以每次迭代一个周期运行循环。这里的主要问题是,您正在现有操作系统之上的云和虚拟化上运行。您没有看到预期结果的原因有多种: 在云上,您无法控制虚拟机如何共享物理资源(即服务器节点)。云提供商大量利用负载平衡和整合,这会导致显著的性能变化。如果你重复你的实验,我猜你会看到在性能上有很大的变化,这会使你的结果明显地扭曲 在您的虚拟设置上,您实际上没有提供有关VM配置的任何详细信息。在VM层运行会增加大量内存使用和延迟开销 考虑到您提供的细节,这些实验并不具有可比性。在不同的操作系统上运行相同的代码也会带来另一种程度的不可预测性。电源/热量管理和调度策略在Windows和Linux之间可能有很大不同。即使在同一个操作系统中,也有许多控制旋钮足以产生错误的测量 如果您想比较两种不同的处理器,以下是有关如何设计实验的一些指导原则:
希望这有帮助 “单核E5-26xx v4”不存在,您的代码可能运行在另一个CPU上的虚拟机上。请注意,为了允许虚拟机迁移到不同的实际计算机,通常会选择一个“最小公分母虚拟CPU”。这两个可执行文件之间有区别吗?如果是这样,那就可以解释了。只需在一个系统上编译,并在两个测试系统上运行该可执行文件。
➜ ~ gcc -std=c11 a.c -O2 && time ./a.out
2420917449941559086
./a.out 7.01s user 0.00s system 99% cpu 7.019 total