超线程对编译器性能的影响?

时间:2010-01-06 18:07:14

标签: performance compilation hyperthreading

假设我们想尽快编译一个大型项目(比如GCC或Linux内核)。具有超线程功能的CPU(比如Intel Core i7)是否可以在启用或禁用超线程的情况下更快地运行编译器?是否有任何公布的基准测试可以测试这个?

我对超线程的理解是每个核心都可以从两个(或更多个进程)中选择指令。这通常使核心更有效,因为功能单元不太可能空闲。但是,由于在相同内核上运行的进程共享资源(如缓存)可能会相互干扰,因此可能会降低性能。性能是否实际增加取决于工作量。

因此,对于编译器工作负载,性能是否会提高?如果是这样,多少钱?

2 个答案:

答案 0 :(得分:26)

在Ubuntu 8.04 x86上编译coreutils-8.4

支持HT的Intel Atom 1.6 GHz:

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.375s
user    2m22.873s
sys     0m10.541s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.707s
user    3m26.121s
sys     0m13.821s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.372s
user    2m22.753s
sys     0m10.657s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.851s
user    3m26.145s
sys     0m13.685s
~/coreutils-8.4$

因此,超线程可将运行时间缩短至75%,相当于<强>处理能力提高33%。 (我运行了两次以确保所有内容都在内存缓存中。)

这是一个对照实验,表明单独的make -j2并没有提高在Ubuntu 8.04 x86上编译coreutils-8.4的速度

单核Core 2 Quad 2.5 GHz VM(无HT):

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.453s
user    0m38.870s
sys     0m5.500s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.131s
user    0m40.450s
sys     0m4.580s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.621s
user    0m39.090s
sys     0m5.340s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.165s
user    0m40.390s
sys     0m4.610s
~/coreutils-8.4$

答案 1 :(得分:0)

这完全取决于编译器是否被编写为多线程。如果是,那么绝对超线程可以加快速度,因为操作系统可以将编译器线程的不同部分安排到不同的内核上。我同意Ken的观点,编译通常比处理密集型更多地受I / O限制,因此拥有快速硬盘驱动器比使用100个内核的快速处理器更为必要。