现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)?

关注:106  答案:2  mip版

解决时间 2021-02-02 01:11

提问者你說、你愛我

2021-02-01 10:18

如果能,那么线程之间的同步怎么样实现?怎么样保证指令的同步。如果不能,那么多核的意义何在,只是提高单个机器上能够运行的进程总数吗?那么对于进程而言,多核与单核有什么区别呢,求大神?

最佳答案

二级知识专家那年仲夏

2021-02-01 11:56

现在的技术,还是一个线程只能运行在一个 CPU 上。多核心,必须用多线程/进程来运行才能实现最大化。当然,你可以单个线程不停的在所有的 CPU 上来回跳。但是效率会很低很低。

因为 CPU 有寄存器和缓存的问题。如果你切换 CPU 运行,所有的数据都要进行一次传递。非常浪费时钟(在 CPU 上,程序执行不是一个时钟马上就能任意执行一个指令,而是流水线作业,一个指令需要很多个时钟才能处理完,数据存取也都要等)。

这也因为程序原本就都是顺序执行的。你没办法让一个程序的后面的结果可以跳过前面的结果而得出。

当然,现在 CPU 确实有这种技术,叫做乱序执行。也就是当前面的过程还没有计算时,后面的指令先计算。但是这种事情是要靠猜测的,而且这也仅仅是分支预测,依然不能预测某个计算的结果。即便猜的再准确,也有错的时候。奔腾4 最老的版本就有这个问题,流水线太长。计算后发现错了。整条流水线需要清空重新计算。有严重性能问题的奔腾4 CPU ,流水线长度是 31 级。也就是一个程序至少 31 个时钟周期才能从推到流水线后到真正执行。直接浪费了 31 个时钟周期。

所以目前的技术来说,单线程多核新协同计算,技术上不可能实现。

提高性能,就是整理数据处理的算法,把多次重复计算的过程,拆成多条线程分别计算。从而保证 CPU 多核新的效率最大化。每个线程可以共享同一块数据,自己读取自己的数据计算使可以的。不过,这时候就有另外一个问题,数据寻址和传递的性能问题。

全部回答

1楼趁我还喜欢

2021-02-01 12:46

linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法

1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到cpu的每个核上面,只要这个服务不停止,多线程分配就可以自己实现。但是要注意,如果线程函数内部的有某个循环,且该循环内没有任何系统调用的话,可能会导致这个线程的cpu时间无法被切换出去。也就是占满cpu现象,此时加个系统调用,例如sleep,线程所占的cpu时间就可以切换出去了。

2:利用pthread库自带的线程亲和性设置函数,来设置线程在某个cpu核心上跑,这个需要在程序内部实现。同时注意不要和进程亲和性设置搞混淆了

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,

const cpu_set_t *cpuset);

int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,

cpu_set_t *cpuset);

从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、设置以及判断:

//初始化,设为空

void cpu_zero (cpu_set_t *set);

//将某个cpu加入cpu集中

void cpu_set (int cpu, cpu_set_t *set);

//将某个cpu从cpu集中移出

void cpu_clr (int cpu, cpu_set_t *set);

//判断某个cpu是否已在cpu集中设置了

int cpu_isset (int cpu, const cpu_set_t *set);

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

linux内核如何支持多核cpu,现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)?...相关推荐

  1. linux内核支持浮点吗,【转】Linux内核浮点计算支持

    00000000 __divdf3 references this function                    // 这里有调用__divdf3地址 So what is happenin ...

  2. 龙芯linux内核,最新龙芯3A2000/3B2000爆发!Linux内核官方支持

    据龙芯开源社区消息,龙芯3A2000/3B2000处理器的支持代码已经加入了Linux官方内核,会在最新的版本发布时正式采用. linux-mips官方Git代码库 据介绍,龙芯3A2000/3B20 ...

  3. linux内核支持硬盘,Intel 10nm桌面版还是来了:Linux内核已支持

    Intel 10nm工艺处理器目前仅用于笔记本移动平台,而且只有U系列低功耗版.Y系列超低功耗版,甚至在此领域仍需要14nm产品来作为补充,再加上Ice Lake处理器频率偏低,初代10nm Cann ...

  4. Linux内核将支持HyperBus

    Linux内核正在接收对HyperBus的支持,HyperBus是一种高性能DDR总线接口,用于将处理器/控制器/ASIC连接到"HyperFlash"闪存或"Hyper ...

  5. Linux 内核已支持苹果

    2019独角兽企业重金招聘Python工程师标准>>> 导读 妙控板2(Magic Trackpad 2)是苹果推出的一款支持多指触控以及触控力度感应的无线/有线触控板,其触控面积比 ...

  6. linux内核是否支持nfs,嵌入式命令:查看设备是否支持nfs

    1:查看设备是否支持nfs功能 命令: cat /proc/filesystems 若有一行为 nodev nfs,则开发板Linux内核支持NFS,反之需要配置内核 同样方法查看Linux主机内核是 ...

  7. 95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;Android Studio 4.2 发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本

    今天,Linux内核开发者Jiri Slaby宣布长期支持分支Linux Kernel 3.12迎来第63个维护更新版本.在Linux Kernel 3.12.63版本中共计对104份文件进行了调整, ...

  9. linux内核采取,采用动态加载模块的方式Linux内核编译

    Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...

最新文章

  1. 200行代码,一行行教你自制微信机器人
  2. 人脑如何模拟NLP?
  3. 认真对待学习(2月反思)
  4. 海量数据库解决方案2011032301
  5. idea permission denied 权限分配问题解决方案
  6. Android之水平ProgressBar多彩背景颜色
  7. Qt Creator 窗体控件自适应窗口大小布局
  8. 前端学习(2532):Vuex中action
  9. 投入100亿,一所新“交通大学”选址定了!校名却让网友吵翻…
  10. 动手学深度学习(PyTorch实现)(十二)--批量归一化(BatchNormalization)
  11. C++基础知识(二)命名空间
  12. Unity Android 使用UnityWebRequest Post 数据后,没有获得服务器返回的数据
  13. 商城项目html pc,Vue实战篇(PC端商城项目)
  14. Postgresql使用技巧
  15. 小赛毛游C记——分支和循环语句(2)
  16. 「 神器 」强大的系统清理工具
  17. IK 分词器空格支持
  18. 【论文笔记】课堂学习行为测量系统的设计与实现
  19. 盘点经典免费录屏软件,短视频创作必备
  20. 最近火爆的chatgpt,程序员如何使用其进行代码开发

热门文章

  1. 用Excel写个摸球模拟器玩玩
  2. 扫拖一体洗地机实用吗、扫拖一体洗地机哪个品牌好,看完就知道
  3. FHE、MPC、zk-SNARK有何不同
  4. 游戏攻略 Re:LieF ~親愛なるあなたへ~ (relief给挚爱的你)
  5. vue 安装(看图就够了,皮卡皮卡)
  6. s905各种型号的区别_工具柜规格型号
  7. dell笔记本指示灯闪烁_DELL笔记本电脑指示灯在电脑关闭后仍然闪烁是什么原因?...
  8. CASS中基于高程点并生成等高线的方法
  9. Windows 10 uefi引导模式 GPT+UEFI Ghost系统备份还原步骤
  10. 火山快手伪原创视频热门