首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个CPU上分配一个进程

如何在两个CPU上分配一个进程
EN

Unix & Linux用户
提问于 2019-06-06 09:25:56
回答 2查看 4.5K关注 0票数 2

我有一个Ubuntu服务器,它有16个CPU。(nproc --all给我看16)

我编写了一个名为test.sh的bash脚本,如下所示:

代码语言:javascript
复制
#!/bin/bash


while :
do
    echo xxx
done

我执行了:./test.sh >/dev/null &

然后,我使用命令top来监视cpu使用情况,发现由于进程test.sh,几乎100%地使用了一个cpu:

代码语言:javascript
复制
6411 me       20   0   11240   3052   2852 R  93.8  0.0   0:11.71 test.sh
%Cpu5 : 96.7 us,  3.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

正如我们所看到的,进程test.sh已经被分配到第5 CPU上,它已经被使用了几乎100%。

是否有可能在多个CPU上分配一个很重的进程,这样我们就可以更多地使用CPU?为什么操作系统没有在多个CPU上分配进程test.sh?是因为进程test.sh不够重,还是我们应该为操作系统做一些配置?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-06-06 09:40:10

单个线程不能在多个核之间拆分:

一个程序需要编写成有多个线程(每个内核一个线程),或者需要有多个程序。如果没有,你就不会使用核心。

编写使用更多内核的程序并不简单,并不是所有的问题都可以并行化(编写来运行在多个核心上)。如果一个问题包含20%基本上是连续的代码,那么如果有无限多的处理器,那么它将不会比原始执行时间的20%更快(500%的速度增长)。然后是间接费用(线程之间的通信)。

如果你没有任何的核心应用程序,那么你最好出售它,并得到一个更便宜的机器。

每个核心将有大量的并行性,以处理单个线程,但这是不可见的。现在,我们正在努力使单个核心更快,因为我们增加了核心。一开始效果很好。

Unix系统(如Gnu/Linux,例如Ubuntu)在使用额外的内核方面做得很好,大约有2→4。当您拥有病毒扫描器的核心、碎片整理器的核心和其他所有的内核时,微软的Windows都会得到改进。

在那之后,只有当你有为多核设计的应用程序时,它才会起作用。

票数 4
EN

Unix & Linux用户

发布于 2021-03-11 06:17:35

下面是可以使用多个处理器的linux命令的示例:

  • make -j
  • gcc -pipe

在用make编译大型项目时,gcc选项特别有用和简单。

  • 调用gcc时,将-fopenmp选项添加到构建选项中。
  • 尝试在for循环的右边添加以下的杂注:#杂注omp并行for(i=0;i<8000000000;i++) { ptr我 = i/10000;}

默认情况下,OpenMP将创建与机器内核相同的线程,并在它们之间平均地分担工作负载。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/523252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档