关于多核CPU的“亲缘性”的疑问

TCSS001 2015-04-20 06:33:14
看Win编程里面讲了关于多核CPU的亲缘性概念,大致意思就是:对于多核CPU,如果本次计算能在上次计算所在的CPU进行,则利用原CPU缓存中的数据。具体设置方法主要用了SetThreadAffinityMask函数,可以限制线程运行的CPU。

正好看到了一个关于在任务管理器中绘制正弦曲线的编程题目。

于是简单写了些代码实现,大致思想就是在时间上分割多个小区间,每个小区间内循环时间段和总时间段(循环+休眠)的比例成正弦曲线的分布。

但是最后结果并不是想看到的正弦曲线,电脑是I52320的CPU,开始怀疑是SetThreadAffinityMask没起作用,手动在任务管理器中设置,只在CPU0执行,最后CPU0绘制出了正弦曲线。

后面查MSDN知道SetAffinityMask失败的时候返回0,做了判断,结果没有失败。

问题:
1,SetThreadAffinityMask设置以后就一定是在相应CPU上执行么?这样岂不是会出现其余CPU空闲,一个CPU忙碌的状态。
2,SetThreadAffinityMask在上面的设置中为什么没有成功。

...全文
222 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2015-04-21
  • 打赏
  • 举报
回复
SetThreadAffinityMask指可以让某个线程运行于某个CPU核上,当然也就可以会出现其余CPU空闲,一个CPU忙碌的状态。 2.为什么失败,原因就不定了,参数不对,CPU不支持等等都会导致调用失败

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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