通过CPU_SET可以为进程选择指定的cpu,详细见:http://www.oratea.net/?p=706
对于多核的cpu,同一个物理cpu内的core一般都是公用l3 cache,那么同一个物理cpu内的core的信息交换就是通过ls cache.
对于不同的物理cpu,那么信息交换就没那么容易了,要通过内存.
下面的测试是在一台有两个四核的cpu上运行的.
代码如下:
#include#include#include#include#include#define __USE_GNU#include#include#includeint main(int argc,char **argv) {??? int num=atoi(argv[1]);??? int cpu1=atoi(argv[2]);??? int cpu2=atoi(argv[3]);??? int i=0;??? int n=0;??? cpu_set_t mask;?????? for(i=0;i
在程序运行的过程中,会在两个核中不停的转换.
测试1,在同一个核上执行
real??? 0m0.633suser??? 0m0.292ssys???? 0m0.340s
测试2,在同一个物理cpu上的不同核上运行
real??? 0m14.751suser??? 0m0.293ssys???? 0m0.981s
测试3,在不同的物理cpu上运行
real??? 0m17.440suser??? 0m0.454ssys???? 0m1.854s
从上面的sys时间,可以很容易的比较出性能的差距.
原文地址:关于多核cpu的一个测试, 感谢原作者分享。 来说是非者,便是是非人。