在编译大型软件(例如引导gcc)时,更重要的CPU或RAM是什么?


11

我打算尽快购买一台新计算机,并且我想要一台能够在快速编译时间内获得最佳性能的计算机。

因此,我应该在意获得可以承受的最高GHz的四核CPU,还是应该投资更高速度的RAM?

您对我应该选择哪种类型的RAM有什么建议?

图形性能无关紧要,可以编译软件负载并运行数学模拟。

Answers:


8

我不会说。而是获得快速的SSD硬盘驱动器。当然,您还需要适当的CPU和RAM数量,但是是的...


2
好吧,我没有SSD,而是获得32GB的RAM并在tmpfs上编译RAM中的所有内容……甚至比SSD还要快=)
Dima

1
好吧,这是相同的想法:p
Svish 2013年

2
我不同意。我的笔记本电脑有一个SSD驱动器,编译速度没有太大差别。另一方面,购买一台新计算机的CPU速度几乎提高了三倍,而SSD机器上只有4GB vs 6GB,因此编译速度几乎快了3倍。 anandtech.com/show/2829/25发现使用SSD不会明显改善编译器速度,而blog.hypercomplex.co.uk/index.php/2010/06/…发现23%的改善。在我看来,如果您有足够的内存,则编译涉及的磁盘使用很少。
克里斯·龙

1
另一个想法是,某些编译器可能使用大量临时文件而不是内存来进行编译,在这种情况下,SSD或ramdisk会提供最大的帮助。但是,我不希望现代的编译器能够以这种方式进行工程设计,因为内存既便宜又大,并且当内存不足时系统会处理将其分页到磁盘的问题。使用XCode 3.2.6(基于gcc 3或4)时,SSD几乎没有好处。
克里斯·龙

在大量使用文件复制/移动的大型项目/解决方案中,SSD产生了显着差异。我个人没有使用过tmpfs风格的RAM,但是我听说过一些不错的东西。对于较小的项目,可能很好。对于巨大的?这可能是不够的。
kayleeFrye_onDeck

4

RAM可能会给您带来更大的收益。编译,尤其是大型应用程序,是非常I / O密集型的,拥有更多的RAM意味着您可以节省更多的磁盘分页时间。当今的大多数CPU,特别是如果您使用便宜的四核处理器,将为编译提供足够的CPU能力,但是拥有RAM将有助于处理来回的数据。

第二个想法,这取决于您的数学模拟和构建过程。它们可并行化吗?如果不是这样的话,尽管新的英特尔芯片(Core i7)在每个内核的基础上都非常快,但是增加更多的内核并不会真正加快它的速度。


1
编译与磁盘有什么关系?
Arash

2

我说要获得大量的RAM,并使用ramdisk进行临时存储。这将大大提高编译速度。快速的多核CPU也可以,但我认为您会从大量的ram中受益。看一下这篇文章的一些想法。这里有更多信息,这里还有更多信息。我认为使用RAM比使用SSD更快,但是我可能是错的。


2

对于您的计算,处理器是最重要的。

编译会同时给处理器和RAM带来压力。

我认为您最具成本效益的解决方案将是获得您可以负担的最佳CPU,最好是四核。随着RAM的价格便宜(DDR3现在和DDR2一样便宜),您可以轻松插入所需的少量硬币(16 GB DDR3的价格为newegg的$ 180……)只是试图证明它有多便宜)。因此,我将尽可能多地投资购买高质量的CPU。


花更多的钱来获得更快的CPU是一个好建议。但是不要花更多的钱来获得更多的内核。GCC在一个线程中进行所有编译,因此它永远不会使用多个内核。
艾萨克·拉比诺维奇

1
@Isaac是的,但是构建系统通常可以同时产生多个gcc作业,例如make使用-j选项。另外,我相信llvm可以或将能够使用多个线程来编译单个文件。
Ponkadoodle

@Wallacoloo好吧,当您在依赖关系图中具有并行文件时,有时有时会获得一些额外的速度。不过,我认为,在加快构建速度方面,额外的内核只是一个很小的因素。很难说,因为额外的核心,是在新的CPU的标准功能做的只是通过时钟速度更快的东西了。如果要证明我错了,请尝试使用-j和不使用-j进行大型编译。
艾萨克·拉比诺维奇

2
@IsaacRabinovitch其实在大的代码库它的问题很多。在我们的代码库中,编译时间几乎与distccmake -j8(本地)最多 make -j30(通过网络分布))呈线性减少关系
Alex

0

好的图形可能会有所帮助,因为上面带有CPU的图形卡可以减少主CPU的负载。CPU功能可能比RAM更重要,但是两者越好,您的生活就越好。


好点-仅在进程可以使用CUDA内核的情况下,而大多数情况则不是。
NoBugs

0

由于物理限制,内核本身不会很快变得更快,因此,除非您打算投入定制硅上投资更快的cpu,否则除非并行化确实会有所作为,但是许多软件很难超过4个内核,否则将无法解决您的问题。 ,我知道这是因为我经常编译我的整个系统,并且很多时候我去查看资源统计信息。而且,即使开发人员想要增加并行化,有时也很难以一种好的方式来实现它。对cpu进行投资既可以提高服务性能,又或者如果您首先基于数据进行计算,那将是一件好事。即使以后会影响执行行为;如果您的编译遵循这些模式中的某些模式,则可能很难讨论,但这是构建过程中的一些特殊情况;例如,这就是为什么在图形计算上更多的内核仍然会有所作为的原因。否则,您将尽最大可能增加I / O,它可能涉及磁盘,内存和主板

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.