我有一个带有超线程的四核处理器.当我使用make -j8
它比make -j4
(我读取Java中的核心数然后调用make -j<number of cores>
)更快.
我不明白为什么make -j32
比make -j8
我(只读Java)只有8个内核(超线程使物理内核的数量翻倍)更快.怎么可能?
sar*_*old 22
编译比CPU速度和可用内核数量更多:磁盘带宽和内存带宽也很重要.
在你的情况下,我想每个CPU HT兄弟大约需要执行4个进程.当它启动时,它会阻塞磁盘IO并进入下一个进程.第二个尝试打开第二个文件,阻止磁盘IO,并且兄弟会移动到下一个进程.在第一个磁盘IO就绪之前启动四个编译器不会让我感到惊讶.
因此,当第一个最终读入程序源时,编译器必须开始搜索目录以找到#included文件.每个都需要一些open()调用,然后是read()调用,所有这些调用都可以阻塞,所有这些调用都会放弃兄弟节点以便运行其他进程.
现在将它乘以8个兄弟 - 每个HT核心将运行直到它阻止内存访问,此时它将交换到其他兄弟,并运行一段时间.一旦第一个兄弟的内存被提取到缓存中,就可能是第二个兄弟在等待内存时停顿的时候了.
你可以通过使用你的编译运行速度有一个上限make -j
,但是两倍数的cpus对我来说是一个很好的起点.
归档时间: |
|
查看次数: |
7244 次 |
最近记录: |