现在的位置: 首页 > 综合 > 正文

多核多线程测试CPU亲和性

2014年09月29日 综合 ⁄ 共 868字 ⁄ 字号 评论关闭
//smp.c
#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <sys/sysinfo.h> //get_nprocs()
#include <pthread.h>

#define MAX_VALUE 1000000

inline int set_cpu(int i)
{
	cpu_set_t mask;
	CPU_ZERO(&mask);
	
	CPU_SET(i,&mask);
	
	if(-1 == sched_setaffinity(0,sizeof(cpu_set_t),&mask))
	{
		return -1;
	}
	
	return 0;
}

void* pth_add(void* x)
{
	int cpuid = (int)x;
	
	if(-1 == set_cpu(cpuid))
	{
		return NULL;
	} 
	
	while(1)
	{
	//	printf("on CPU %d \n",cpuid);
	}
	
	return x;
}

int main()
{
	int N = get_nprocs();
	int cpuid;
	int err;
	void * pRslt=NULL;
	
	pthread_t pthR_t[N];

	for(cpuid=0;cpuid<N;cpuid++)
		if((err=pthread_create(&pthR_t[cpuid],NULL,pth_add,(void*)cpuid))!=0)
		{
			printf("Create  Thread %d Failed . exit !\n",cpuid);
			return -1;
		}
	
	for(cpuid=0;cpuid<N;cpuid++)
	{
		if((err=pthread_join(pthR_t[cpuid],&pRslt))!=0)
		{
			printf("Can not join Thread .exit");
			return -1;
		}
		else
		{
			printf("Thread %d exit!\n",(int)pRslt);
		}
	}
		
	return 0;
}

编译: gcc -g smp.c -o smp -lpthread
测试:top 然后键入 1 然后再 键入 H,不出意外,每个cpu的核负载都是100%偷笑

抱歉!评论已关闭.