天天看點

Linux下多CPU中程序與CPU綁定的例子

現在多CPU的趨勢越來越大了. 有時候為了更好地操作機器, 需要将某個程序綁定到具體的CPU上去. 下面給出了一個程序綁定到具體的CPU上去的一個例子.  

Linux下多CPU中程式與CPU綁定的例子

#include<stdlib.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<stdio.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<sys/types.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<sys/sysinfo.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<unistd.h> 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

#define __USE_GNU 

Linux下多CPU中程式與CPU綁定的例子

#include<sched.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<ctype.h> 

Linux下多CPU中程式與CPU綁定的例子

#include<string.h> 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

int main(int argc, char* argv[]) 

Linux下多CPU中程式與CPU綁定的例子

Linux下多CPU中程式與CPU綁定的例子

        int num = sysconf(_SC_NPROCESSORS_CONF); 

Linux下多CPU中程式與CPU綁定的例子

        int created_thread = 0; 

Linux下多CPU中程式與CPU綁定的例子

        int myid; 

Linux下多CPU中程式與CPU綁定的例子

        int i; 

Linux下多CPU中程式與CPU綁定的例子

        int j = 0; 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        cpu_set_t mask; 

Linux下多CPU中程式與CPU綁定的例子

        cpu_set_t get; 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        if (argc != 2) 

Linux下多CPU中程式與CPU綁定的例子

        { 

Linux下多CPU中程式與CPU綁定的例子

                printf("usage : ./cpu num\n"); 

Linux下多CPU中程式與CPU綁定的例子

                exit(1); 

Linux下多CPU中程式與CPU綁定的例子

        } 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        myid = atoi(argv[1]); 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        printf("system has %i processor(s). \n", num); 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        CPU_ZERO(&mask); 

Linux下多CPU中程式與CPU綁定的例子

        CPU_SET(myid, &mask); 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        if (sched_setaffinity(0, sizeof(mask), &mask) == -1) 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

                printf("warning: could not set CPU affinity, continuing

Linux下多CPU中程式與CPU綁定的例子

\n"); 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        while (1) 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

                CPU_ZERO(&get); 

Linux下多CPU中程式與CPU綁定的例子

                if (sched_getaffinity(0, sizeof(get), &get) == -1) 

Linux下多CPU中程式與CPU綁定的例子

                { 

Linux下多CPU中程式與CPU綁定的例子

                        printf("warning: cound not get cpu affinity, continuing

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

                } 

Linux下多CPU中程式與CPU綁定的例子

                for (i = 0; i < num; i++) 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

                        if (CPU_ISSET(i, &get)) 

Linux下多CPU中程式與CPU綁定的例子

                        { 

Linux下多CPU中程式與CPU綁定的例子

                                printf("this process %d is running processor : %d\n",getpid(), i); 

Linux下多CPU中程式與CPU綁定的例子

                        } 

Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子
Linux下多CPU中程式與CPU綁定的例子

        return 0; 

Linux下多CPU中程式與CPU綁定的例子

下面是在兩個終端分别執行了./cpu 0  ./cpu 2 後得到的結果. 效果比較明顯.  

Cpu0  :  5.3%us,  5.3%sy,  0.0%ni, 87.4%id,  0.0%wa,  0.0%hi,  2.0%si,  0.0%st 

Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu2  :  5.0%us, 12.2%sy,  0.0%ni, 82.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu4  :  0.0%us,  0.0%sy,  0.0%ni, 99.7%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st 

繼續閱讀