关于多核CPU的“亲缘性”的疑问
看Win编程里面讲了关于多核CPU的亲缘性概念,大致意思就是:对于多核CPU,如果本次计算能在上次计算所在的CPU进行,则利用原CPU缓存中的数据。具体设置方法主要用了SetThreadAffinityMask函数,可以限制线程运行的CPU。
正好看到了一个关于在任务管理器中绘制正弦曲线的编程题目。
于是简单写了些代码实现,大致思想就是在时间上分割多个小区间,每个小区间内循环时间段和总时间段(循环+休眠)的比例成正弦曲线的分布。
但是最后结果并不是想看到的正弦曲线,电脑是I52320的CPU,开始怀疑是SetThreadAffinityMask没起作用,手动在任务管理器中设置,只在CPU0执行,最后CPU0绘制出了正弦曲线。
后面查MSDN知道SetAffinityMask失败的时候返回0,做了判断,结果没有失败。
问题:
1,SetThreadAffinityMask设置以后就一定是在相应CPU上执行么?这样岂不是会出现其余CPU空闲,一个CPU忙碌的状态。
2,SetThreadAffinityMask在上面的设置中为什么没有成功。