转载:

make -j4是什么意思
看书上说
1) make(1)只衍生一个作业//作业是什么意思?make(1) 是不是就是make的意思?
2) 在双处理器上make -j4,难道是让每个处理器跑两个作业?那和make -j2效率相比 难道不是一样的?

新手提问 多多关照

------解决方案--------------------
make(1)表示在unix手册(man)的第一章,可以用 man 1 make 来查看。

两个处理器的话,一般 -j2 能达到最高效率。
不过也有些进程会花时间在IO上,并不能利用完单个cpu的时间。这样 -j4 可以更快。 
------解决方案--------------------
jobs=4
同时最多跑4个作业
make自己会协调,如果CPU等资源不够可能小于4个。不过一般瓶颈都在硬盘,所以一般能看到4个进程一起跑。 
------解决方案--------------------
启用4个cpu去编译。提高编译速度。 
------解决方案--------------------

感觉指的是逻辑线程数,和CPU无关,逻辑线程具体跑在哪个逻辑CPU上应该是由内核决定的。make说白了也只是个程序而已。

========================================

make(gmake,gnumake)的-j参数,优化多核、多线程的编译过程

一直以为,现在主流的程序,比如apache2.2,编译过程自动会对多核优化 结果发现不是这样的

测试环境:默认./configure无参数后的apache2.2.14源码根目录

测试方法:使用以下命令,粗略记录编译过程时间。 $ date >> /qshen/time && make && date >> /qshen/time

对比与加了-j参数的make的编译时间

查阅资料,网上很多人用双路INTEL XEON E5404测试时使用参数-j16,使用单路E5405测试使用参数-j8。这个不太理解。因为E5405是四核心,每核心1线程,不知为何要使用二倍的jobs。在此也实际测试

我的测试环境CPU是INTEL XEON E5405,单路。8G内存。 首先,不带-j的命令执行2次

然后,使用-j4执行二次

再然后,使用-j8执行二次

最后使用-j16执行一次作为参考数据

结果:共计执行

$ cat /qshen/time Mon Feb 1 12:51:17 CST 2010 Mon Feb 1 12:52:55 CST 2010
Mon Feb 1 12:53:29 CST 2010 Mon Feb 1 12:55:07 CST 2010
Mon Feb 1 12:55:34 CST 2010 Mon Feb 1 12:56:14 CST 2010
Mon Feb 1 12:56:37 CST 2010 Mon Feb 1 12:57:16 CST 2010
Mon Feb 1 12:57:38 CST 2010 Mon Feb 1 12:58:16 CST 2010
Mon Feb 1 12:58:36 CST 2010 Mon Feb 1 12:59:13 CST 2010
Mon Feb 1 12:59:48 CST 2010 Mon Feb 1 13:00:26 CST 2010 结果发现,确实默认的make不加-j参数效率比较低。加上-j参数,-j4和-j8性能差距不大,-j16性能就比较差了。准备进一步翻阅资料看看到底应该取值多少。

make j* make j4 make j8 区别的更多相关文章

  1. Logistic回归Cost函数和J(θ)的推导----Andrew Ng【machine learning】公开课

    最近翻Peter Harrington的<机器学习实战>,看到Logistic回归那一章有点小的疑问. 作者在简单介绍Logistic回归的原理后,立即给出了梯度上升算法的code:从算法 ...

  2. HTTP头信息(转)--1

    转自:http://www.cnblogs.com/9988/archive/2012/03/21/2409086.html 我用抓包软件抓了http的包,发现accept大多数有两种情况. 第一种: ...

  3. 安装运行okvis

    1. 安装依赖项 sudo apt-get install cmake   //cmake sudo apt-get install libgoogle-glog-dev  // glog是Googl ...

  4. spj 设计

    在数据库中使用SELECT INTO 语句从SP.J.P表中创建一个新表J_P_SPJ新表J_P_QTY中的属性列包括:工程号 (JNO).工程名(JNAME).零件号(PNO).零件名(PNAME) ...

  5. 用Hutton32玩转数字电路(一):逻辑门

    最近看到有人用Minecraft里面的红石电路制作出了计算器,还有一篇神文:<基于Minecraft实现的计算机工程>,视频在此,好像还能算浮点数.三角函数.我对红石不是太了解,那能不能用 ...

  6. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  7. 优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。

    在您阅读本文前,先需要告诉你的是:即使是本文优化过的算法,DCT去噪的计算量依旧很大,请不要向这个算法提出实时运行的苛刻要求. 言归正传,在IPOL网站中有一篇基于DCT的图像去噪文章,具体的链接地址 ...

  8. CodeForces 24D Broken Robot

    题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 一 ...

  9. MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示

    回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...

随机推荐

  1. 远程管理FTP

    FTP默认路径 建立pub目录(注意不是文件) LeapFTP使用 注:上传到服务器的pub文件下,不要弄错目录. 在本地计算机利用LeapFTP与FTPServer进行数据的传输,但是FTPServ ...

  2. k8s集群管理注意要点【持续更新】

    1.编写pod yaml文件时绑定调度标签,必须要给指定节点绑定标签,否则无法调度到指定节点上,报错: Events: Type Reason Age From Message ---- ------ ...

  3. Java集合框架之简述

    Java集合框架简述 Java中的集合类是一种工具类,就像是容器,存储任意数量的具有共同属性的对象,集合框架是一个用来代表和操纵集合的统一架构,包含如下部分: 1.接口: 接口是代表集合的抽象数据类型 ...

  4. Jmeter设置成中文

    首次启动Jmeter为中文 选择后即变为中文

  5. docker的数据管理

    容器中管理数据主要有两种方式: 1.数据卷:容器内数据直接映射到本地宿主机. 2.数据卷容器:使用特定容器维护数据卷 数据卷: 数据卷是一个可供容器使用的特殊目录,他将主机操作系统目录直接映射进容器. ...

  6. springboot拦截异常信息发送邮件提醒

    -- private JavaMailSender sender; 可能会出现注入错误,请注意yam配置文件中格式是否一致:否则会找不到注入的bean 一 发送邮件 在Springboot中发送邮件非 ...

  7. WorkStation 虚拟机迁移到 ESXi

    将Workstation的vmdk文件导入到Esxi. 提示如题错误提示. 无法打开磁盘 scsi0:0: 磁盘类型 7 不受支持或无效.请确保磁盘已导入. 在VMware Workstation,V ...

  8. StringJoiner 源码阅读

    StringJoiner 属性说明 /** * StringJoiner 使用指定的分割符将多个字符串进行拼接,并可指定前缀和后缀 * * @see java.util.stream.Collecto ...

  9. 【VBA】多条件去重

    Function kaidan(txt)Dim i As IntegerDim arrSet d = CreateObject("scripting.dictionary")For ...

  10. Fullgc引发redis超时异常

    1.现象 -|2019-11-14 11:50:01.095|ERROR|TID:2254.3964.15737033664569521|DubboServerHandler-192.168.58.2 ...