如何把一个thread分配到一个cpu的特定的core上

registercsdn 2018-01-13 09:31:07
比如我有3个cpu, 每个cpu有4个cores。

我现在有个thread,希望在第二个cpu的的第三个core上面跑,如何配置?

网上看到很多程序可以指定cpu,但是不知道如何指定某个cpu的core上。

希望有举例程序,容易理解和操作。
...全文
2393 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-23
  • 打赏
  • 举报
回复
引用 15 楼 registercsdn 的回复:
[quote=引用 14 楼 zhao4zhong1 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要轻易怀疑操作系统线程调度的智商。
正解![/quote] 系统在分配threads到不同的cpu的不同的core上的时刻,系统不知道接下来每个thread里面的计算量的。 我现在是多cpu的系统,有cpu有的运算能力一般,有的运算能力很强,我计划主动把计算量大的thread分配给远算能力强的cpu。[/quote] 通常你觉得自己调度线程的智商高于操作系统调度线程的智商都是错觉。
registercsdn 2018-03-22
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 不要轻易怀疑操作系统线程调度的智商。
正解![/quote] 系统在分配threads到不同的cpu的不同的core上的时刻,系统不知道接下来每个thread里面的计算量的。 我现在是多cpu的系统,有cpu有的运算能力一般,有的运算能力很强,我计划主动把计算量大的thread分配给远算能力强的cpu。
赵4老师 2018-03-21
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
不要轻易怀疑操作系统线程调度的智商。
正解!
registercsdn 2018-03-21
  • 打赏
  • 举报
回复
引用 9 楼 zwfgdlc 的回复:
SetThreadAffinityMask(GetCurrentThread(), 1 << 0); //指定运行在核0
SetThreadAffinityMask(GetCurrentThread(), 1 << 1);//指定运行在核1
SetThreadAffinityMask(GetCurrentThread(), 1 << 2);//指定运行在核2
SetThreadAffinityMask(GetCurrentThread(), 1 << 3);//指定运行在核3
对于多核cpu,能否直接指定cpu的序列号 及其它的第几个核? 这样不用计算在它之前几个cpu,每个cpu几个核。
registercsdn 2018-03-21
  • 打赏
  • 举报
回复
引用 11 楼 qq_37336686 的回复:
设置当前线程运行的核心 SetThreadAffinityMask(GetCurrentThread(), 0x00000040); //允许在那些核心上运行,就把核心对应的那一位设置为1。0x00000040第7位是1,,那么线程在第七个核心运行,可以把多个位设为1,这样线程可以在这多个核心上运行,只能指定核心,对于多个CPU要根据配置,计算第二个CPU的第三个核心是排多少位 设置创建的线程运行的核心 SetThreadAffinityMask(thread , 0x00000040); //thread创建线程时返回的HANDLE
第二个参数是核的序列号,对吧? 这样的话,有没有办法直接指定cpu的序列号? 这样就不用去计算在当前的cpu之前有几个核了
qq_37336686 2018-02-04
  • 打赏
  • 举报
回复
设置当前线程运行的核心 SetThreadAffinityMask(GetCurrentThread(), 0x00000040); //允许在那些核心上运行,就把核心对应的那一位设置为1。0x00000040第7位是1,,那么线程在第七个核心运行,可以把多个位设为1,这样线程可以在这多个核心上运行,只能指定核心,对于多个CPU要根据配置,计算第二个CPU的第三个核心是排多少位 设置创建的线程运行的核心 SetThreadAffinityMask(thread , 0x00000040); //thread创建线程时返回的HANDLE
烟袅许伊 2018-02-01
  • 打赏
  • 举报
回复
楼主嫌程序运行效率太高了?
zwfgdlc 2018-01-31
  • 打赏
  • 举报
回复
SetThreadAffinityMask(GetCurrentThread(), 1 << 0); //指定运行在核0
SetThreadAffinityMask(GetCurrentThread(), 1 << 1);//指定运行在核1
SetThreadAffinityMask(GetCurrentThread(), 1 << 2);//指定运行在核2
SetThreadAffinityMask(GetCurrentThread(), 1 << 3);//指定运行在核3
registercsdn 2018-01-31
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:
[quote=引用 6 楼 registercsdn的回复:][quote=引用 4 楼 paschen 的回复:] 不好意思,指定线程是SetThreadAffinityMask https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx
能够给几条简单的代码来说明,比如我接下来的任务程序在第二个cpu的的第三个core上面跑。然后我又切换到地四个cpu的第一个core上跑。可以的话,我再多加些积分。[/quote] https://www.cnblogs.com/findumars/p/4999243.html[/quote] 这里说明了如何指定了cpu,但是没有说明如何指定这个cpu的某个core
paschen 版主 2018-01-26
  • 打赏
  • 举报
回复
引用 6 楼 registercsdn的回复:
[quote=引用 4 楼 paschen 的回复:] 不好意思,指定线程是SetThreadAffinityMask https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx
能够给几条简单的代码来说明,比如我接下来的任务程序在第二个cpu的的第三个core上面跑。然后我又切换到地四个cpu的第一个core上跑。可以的话,我再多加些积分。[/quote] https://www.cnblogs.com/findumars/p/4999243.html
registercsdn 2018-01-26
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
不好意思,指定线程是SetThreadAffinityMask https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx
能够给几条简单的代码来说明,比如我接下来的任务程序在第二个cpu的的第三个core上面跑。然后我又切换到地四个cpu的第一个core上跑。可以的话,我再多加些积分。
赵4老师 2018-01-15
  • 打赏
  • 举报
回复
不要轻易怀疑操作系统线程调度的智商。
zwfgdlc 2018-01-14
  • 打赏
  • 举报
回复
DWORD_PTR WINAPI SetThreadAffinityMask(
  _In_ HANDLE    hThread,
  _In_ DWORD_PTR dwThreadAffinityMask
);
楼上那个是指定进程不是线程
paschen 版主 2018-01-14
  • 打赏
  • 举报
回复
SetProcessAffinityMask 具体用法可查MSDN
paschen 版主 2018-01-14
  • 打赏
  • 举报
回复
不好意思,指定线程是SetThreadAffinityMask https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx
ztenv 版主 2018-01-13
  • 打赏
  • 举报
回复
可以设置线程的姻亲码,linux和windows都有相应的api,就是调用一个api而已,没有技术含量。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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