gpt4 book ai didi

gcc - 为什么使-j传递的数量大于可用内核数时,其性能会更好?

转载 作者:行者123 更新时间:2023-12-03 12:14:52 33 4
gpt4 key购买 nike

我有一个带hyper-threading的四核处理器。当我使用make -j8时,它比make -j4快(我读了Java中的内核数,然后称为make -j<number of cores>)。

我不明白为什么当我(用Java读取)只有8个内核(超线程使物理内核数量加倍)时,make -j32make -j8更快。那怎么可能?

最佳答案

除了CPU速度和可用内核数之外,还有更多的编译需求:磁盘带宽和内存带宽也很重要。

在您的情况下,我想每个CPU HT兄弟大约要执行4个进程。当它开始时,它在磁盘IO上阻塞并移至下一个进程。第二个尝试打开第二个文件,在磁盘IO上阻止,同级移动到下一个进程。在第一个磁盘IO准备好之前启动四个编译器不会令我感到惊讶。

因此,当第一个最终读入程序源代码时,编译器必须开始在目录中搜寻以查找#included文件。每个调用都需要先进行一些open()调用,然后再执行read()调用,所有这些调用都可以阻塞,并且所有这些都将放弃同级操作,以便其他进程运行。

现在,将其乘以八个 sibling -每个HT核心将运行直到阻塞内存访问为止,这时它将切换到另一个 sibling ,并运行一段时间。一旦第一个同级的内存被提取到缓存中,第二个同级可能在等待内存时停顿了。

使用make -j可以使编译运行的速度有一个上限,但是过去两次cpu一直是我的一个很好的起点。

关于gcc - 为什么使-j传递的数量大于可用内核数时,其性能会更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4802164/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com