如何在一个QT程序中process.start()分别指定cpu组0和cpu组1的各个CPU

rjhzp143 2021-06-08 10:11:30

在网上看到有大哥写的贴子,内容如下

---------------------------------------------------------------------

1.在多CPU分组环境下,一个进程默认只能在一个CPU分组里运行。至于分配到哪个分组,由系统决定,不固定分配。 2.一个进程只能绑定一个CPU分组, 线程则没有限制。意味着通过控制,可以让一个进程使用到多个CPU分组的资源。 3.进程设置CPU分组,取决于第一个线程所绑定的CPU分组, 如果要设置进程到某个CPU分组,则需要改变第一个线程的CPU分组,再设置进程affinitity。 4.当设置过线程group与进程group不同组以后, 任务管理器查看进程相关性就会不可用。 5.当设置过进程affinitity,而又设置了线程在同一个分组的进程affinitity以外的核心, 则之前设置的进程affinitity就会失效。 小弟正在用双路64核(2个CPU组,0和1)的机器执行任务,需要指定CPU的核来做不同的工作,

---------------------------------------------------------------------

小弟正在WIN10用双路128核(2个CPU组,0和1)的机器执行QT软件任务,需要指定CPU的核来做不同的工作,用SetProcessAffinityMask()这个函数可以指定0-63的任意CPU或组合CPU来运行我的process调用外部程序,经过观察发现此时的cpu分组随着我qt软件每次启动是随机的,也就是有时候是CPU-0组,有时候是CPU-1组,也就是上文中提到的第一点 “1.在多CPU分组环境下,一个进程默认只能在一个CPU分组里运行。至于分配到哪个分组,由系统决定,不固定分配。”

---------------------------------------------------------------------

我现在想实现的功能是 “1:通过我编写的QT程序,用process.start()同时运行16个外部软件。2:前8个调用将分别占用cpu0组的0-63的cpu。后8个调用分别占用cpu1组的0-63” 。要如何实现?如可以用SetThreadGroupAffinity要如何实现?多谢!!!!

...全文
1965 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rjhzp143 2021-06-10
  • 打赏
  • 举报
回复

还是linux方便做这个管理。。唉。

rjhzp143 2021-06-09
  • 打赏
  • 举报
回复

或者有什么办法可以通过powershell脚本来控制亲和性,我知道有一个process.ProcessorAffinity这个MASK属性可以控制进程的亲和性(0-63),但是没有找到如何修改“处理器组”,使该进程由原来的处理器组0修改到处理器1。

不知谁有这方面的经验。

rjhzp143 2021-06-08
  • 打赏
  • 举报
回复

SetThreadGroupAffinity()能切换CPU组,指定该线程在哪个CPU组及哪些核心(通过mask实现)上运行。

我想要开一个线程 后,调用外部程序,这时候线程就控制不了了。这个外部程序是由SetProcessAffinityMask()来控制的,而进程又是只能固定在程序运行时操作系统随机分配的一个CPU组上。如果此时SetThreadGroupAffinity和SetProcessAffinityMask的亲和相关性CPU组不一致,会导致亲和CPU相关性就失效了。

卡在这里了。

rjhzp143 2021-06-08
  • 打赏
  • 举报
回复

有人指导一下么。

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧