Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 估计编译期间的相对CPU使用率_C++_Linux_Gcc_Compilation_Cpu Usage - Fatal编程技术网

C++ 估计编译期间的相对CPU使用率

C++ 估计编译期间的相对CPU使用率,c++,linux,gcc,compilation,cpu-usage,C++,Linux,Gcc,Compilation,Cpu Usage,今天早上编译的时候我有一个问题 给定一个专用的Linux机器(运行FEDORA),用户远程登录并编译(使用GCC)他们的C++软件,它存储在他们自己的机器上(在一个小局域网上),与符号链接链接到Linux盒。p> 假设每个用户现在正在编译完全相同的代码。。。 一个用户可以在10分钟内编译和链接他的代码 两个用户同时编译总共需要20分钟吗 3个或10个用户呢 当用户增加时,是否会产生回报递减的开销 作为一个额外的问题-在此设置中,您有哪些技巧可以提高编译效率?根据项目源的大小,一种节省方法可能是在

今天早上编译的时候我有一个问题

给定一个专用的Linux机器(运行FEDORA),用户远程登录并编译(使用GCC)他们的C++软件,它存储在他们自己的机器上(在一个小局域网上),与符号链接链接到Linux盒。p> 假设每个用户现在正在编译完全相同的代码。。。 一个用户可以在10分钟内编译和链接他的代码

两个用户同时编译总共需要20分钟吗 3个或10个用户呢

当用户增加时,是否会产生回报递减的开销


作为一个额外的问题-在此设置中,您有哪些技巧可以提高编译效率?

根据项目源的大小,一种节省方法可能是在编译之前将所有文件本地复制到生成计算机。如果编译器必须根据需要通过网络拉取所有文件,这将带来一些开销,因为网络访问比磁盘访问慢得多


如果您编写了一个脚本或使用了一个只将修改过的文件复制到构建机的工具,那么开销将显著减少。在这种情况下,构建机器基本上会保留源文件的本地镜像,每次编译时,它都会更新任何修改过的文件,然后再编译。显然,如果您有大量用户和/或大型项目文件,则会遇到存储/空间问题。

由于以下原因,始终会涉及开销:

  • 调度需求
  • 时间冲突的I/O操作

最后一个对您来说是最重要的,因为网络访问比磁盘访问慢得多。预缓存(首先在本地获取所有文件,然后开始编译)在这里可能会有所帮助。已经启动的构建将不会受到新并发用户的阻碍。

我建议。

编译主要受CPU限制,因此假设您有足够的RAM,您可以预计编译时间大致为(每个任务的时间)*(任务数)/(系统中的CPU/核心数)。(奇怪的是,在我的一个项目中,我在一个3核系统上运行了'make-j',速度提高了3倍以上,因此可能存在某种阻塞问题,阻止顺序make全速运行。)


为什么用户不在他们自己的计算机上编译他们的程序?

我们编写多平台代码,所以我们使用windows在本地构建,并且只有在我们每个人都有一个准备部署/测试的构建时,才在目标linux机上编译,因此预编译然后启动的构建不会受到新构建连接的影响,然后同时开始预处理?新构建的预处理不会严重影响预处理。然而,它将受到新构建的CPU使用量的影响。其思想是CPU使用率不会因为IO等待而下降。我使用distcc3进行编译。在我的新开发工作站到来之前,我将在我的windows机器上使用全屏虚拟机。为了加快速度,我在桌下的两个P4 Dell Optiplex上安装了distcc,否则它们大部分时间都处于空闲状态,我对结果非常满意。