16,817
社区成员




在网上看到有大哥写的贴子,内容如下
---------------------------------------------------------------------
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要如何实现?多谢!!!!
还是linux方便做这个管理。。唉。
或者有什么办法可以通过powershell脚本来控制亲和性,我知道有一个process.ProcessorAffinity这个MASK属性可以控制进程的亲和性(0-63),但是没有找到如何修改“处理器组”,使该进程由原来的处理器组0修改到处理器1。
不知谁有这方面的经验。
SetThreadGroupAffinity()能切换CPU组,指定该线程在哪个CPU组及哪些核心(通过mask实现)上运行。
我想要开一个线程 后,调用外部程序,这时候线程就控制不了了。这个外部程序是由SetProcessAffinityMask()来控制的,而进程又是只能固定在程序运行时操作系统随机分配的一个CPU组上。如果此时SetThreadGroupAffinity和SetProcessAffinityMask的亲和相关性CPU组不一致,会导致亲和CPU相关性就失效了。
卡在这里了。
有人指导一下么。