999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

多核系統中的CPU優化技術

2018-11-26 07:37:56杜秀芳
商情 2018年46期

杜秀芳

【摘要】本文主要介紹了在多核系統中從軟件上開發的一種CPU優化技術。這種優化技術針對CPU使用不均衡的問題,利用任務調度算法能自動平衡CPU的使用,提高多核系統中CPU的使用率,從而發揮CPU的性能優勢。

【關鍵詞】多核系統 CPU優化 任務調度

0 引言

隨著CPU技術的發展,CPU性能的提高方向已經從單核CPU頻率的提高往CPU核數的提高轉變。以INTEL至強系列為例,Xeon D-1521是四核CPU,每核的主頻是2.4GHz;Xeon D-1531處理器是6核設備,主頻是2.2GHz,Xeon E5 v4處理器是10核心設備,主頻是2.2GHzo這三款處理器都是采用14nm工藝制造,主頻并沒有太大分別,在跑分上分別為6980、9730、13923。但是,CPU技術提高了,應用技術并沒有很好的配合提高,并不能發揮CPU的性能優勢。本文開發了一種CPU優化技術,可以提高多核系統中CPU的使用率。

1 CPU使用的不均衡問題

在CPU技術的發展過程中,核心數量的增長是近年的趨勢,對于多核支撐,需要程序開發人員自行分配核心的工作量。但這件事并不是一個簡單的工作,所謂“一核有難十核圍觀”。雖然后來的技術有一定的改善,但是還是沒有實現均衡的使用。

2 綁核的任務系統

本文開發了一套任務調度框架,在本程序框架下運行的程序,會自動平衡多核CPU的使用,達到較優的多核使用效率。本框架是在linux環境下開發和調試的,代碼使用C語言。

2.1 action的定義

本框架把每一個要完成的任務定義為一個action。一個action,從業務上是一個軟件要處理的事務單元,也可以多個事務單元完成一個事務;從代碼上任務可以理解為函數。以路由器為例,從業務上,它處理的任務都是I/O相關的內容,所以每個任務包含I/O相關的信息,比如I/O請求等等;從代碼上,用一個函數指針來描述任務。由于我們這個任務調度算法設計的初衷是方便任務調度、提高CPU使用的效率。所以要求任務的處理時間不能太長。這個太長在CPU領域里面定位為100ms,這個是個估計值。任務的處理時間短是任務的內在要求。

當任務的時間過長,會損耗框架的靈活調度。所以當一個任務的處理時間可能比較長的時候,需要拆分成多個任務,這就是任務拆分。任務拆分的目的是控制單個任務的處理時間。

2.2 線程和CPU的關系

對于高性能處理器,往往有多個CPU,為了講清楚這個關系,我們假設CPU的核數是6核。

在操作系統層面上,基本的運行單元是進程,進程中的調度單元是線程。一個進程可以有多個線程,但是至少要有一個線程,否則就沒必要存在。對于進程所擁有的資源,線程也是可以共享的。在有了線程的操作系統中,進程是分配資源的基本單元,而線程是獨立運行和獨立調度的基本單元。相比較進程來講,線程更小,而且不擁有系統資源,所以對線程的調度開銷會小得多,通過調度線程可以提高系統的多個程序并發執行的程度。

在配置過程中,一個CPU可以綁定多個線程,即多個線程公用一個CPU。每個線程綁定一個CPU時,系統的性能較高。所以在主程序啟動之初,需要把每個線程跟CPU分別綁定。

2.3 CPU的線程的動卜態補償

為了適應程序開發的多樣性,這里任務也分為兩種:一種任務是獨立的,即這種任務可以獨立的運行在一個線程上,不依賴其他的任務,可以獨立完成;另一種任務是非獨立的,即任務之間有相關性,根據這個要求,這類任務需要運行在同樣的線程上,以避免共享資源的訪問導致性能下降。獨立的任務跟所在的線程無關,可以運行在任何的線程上;非獨立的任務只能運行在同一個線程上。通常來說,對于大多數程序開發,獨立的任務占大多數。

對于非獨立的任務,任務的分配機制是固定的,由使用者自行指定線程(也就是固定線程)。

對于獨立的任務,根據線程(CPU)的忙碌程度,把任務分配到不太忙碌的線程,實現CPU的均衡配置,這就是任務遷移。

2.4 技術關鍵點

實現上,首先要設置進程的CPU數量,也就是該程序所在進程使用多少個CPU。這里采用的接口是CPU親和度接口族,主要是這幾個接口。

#define_GNU_SOURCE/關See feature_test_macros(7)*/

int sched_setaffinity(pid_t pid,size_t epusetsize,cpu_set_t*mask);

int sched_getaffinity(pid_t pid,size_t cpusetsize,cpu_set_t*mask);

其中,pid是要CPU的進程pid;mask是二進制掩碼,比如0x000F表示使用CPUO、CPU1、CPU2、CPU3;0x00F1表示使用CPU0、CPU4、CPU5、CPU6、CPU7。

第二個技術點是要設置線程的CPU關系,這一點在實現上需要使用線程CPU綁定函數,這里面

int pthread_setaffinity_np(pthread_t thread,size_t epusetsize,const cpu_set_t*cpuset);

int pthread-getaffinity-np(pthread_t thread,size_t cpusetsize,cpu_set_t*cpuset);

其中,thread為線程id; cpusetsize為cpu數組大小,固定填sizeof(cpu_set_t);cpuset是一個集合,角來表示設置哪些CPU跟這個線程綁定。

這個集合需要提前創建,使用CPU_SEI,接口實現添加。例如:

CPU ZERO(&cpuset;);

for(j=0;i<8;j++)

CPU_SET(j,&cpuset;);

這一段代碼的意思是設置一個CPU包含CPU0-CPU7的集合。

另一個關鍵點就是要求編程人員能夠對任務進行劃分,劃分成盡量與線程無關的任務塊,這樣才能實現任務的自由切換。

3 結束語

CPU技術的發展日新月異,CPU軟件技術的發展也是在逐步提高,逐步發揮出硬件的優勢,本文提供了一種在多核設備上從軟件上優化CPU的技術方案。希望能帶給大家一點思路。

參考文獻:

[1]郭建偉.靈活調度,激活多核CPU“潛力”[J].電腦知識與技術(經驗技巧),2017(11):33-34.

主站蜘蛛池模板: 3D动漫精品啪啪一区二区下载| 亚洲av无码牛牛影视在线二区| 国产成人免费视频精品一区二区| 欧美一级高清片欧美国产欧美| 一级香蕉视频在线观看| 亚洲无卡视频| 谁有在线观看日韩亚洲最新视频| 九色视频一区| 久久亚洲欧美综合| 日本中文字幕久久网站| 亚洲男人天堂久久| 日韩国产欧美精品在线| 国产正在播放| 一级全免费视频播放| 亚洲一区二区三区国产精华液| 成人精品视频一区二区在线| 成人亚洲视频| 亚洲综合色吧| 国产欧美日韩视频一区二区三区| 亚洲精品综合一二三区在线| 国产亚洲欧美日韩在线观看一区二区| 国产精选小视频在线观看| 亚洲综合色婷婷| 国产97区一区二区三区无码| 久草网视频在线| www精品久久| 亚洲首页在线观看| 日韩精品亚洲精品第一页| 一本久道热中字伊人| 国产成人喷潮在线观看| 免费日韩在线视频| 亚洲人妖在线| 中文天堂在线视频| 日韩二区三区| 美女视频黄又黄又免费高清| 精品少妇人妻无码久久| 亚洲欧洲国产成人综合不卡| 国产成人无码播放| 日韩精品久久无码中文字幕色欲| 在线观看国产精品日本不卡网| 国产精品林美惠子在线播放| 精品国产福利在线| 国产福利拍拍拍| 日韩精品无码不卡无码| 国产农村1级毛片| 香蕉久人久人青草青草| 国产91av在线| 在线va视频| 人妻丰满熟妇αv无码| 成色7777精品在线| 91久久偷偷做嫩草影院电| 国产成人亚洲精品色欲AV| 亚洲午夜久久久精品电影院| 久久综合亚洲色一区二区三区| 嫩草国产在线| 麻豆国产在线观看一区二区| 波多野结衣中文字幕一区| 日本午夜影院| 欧美成人免费午夜全| www.av男人.com| 国产精品美人久久久久久AV| 亚洲中文字幕97久久精品少妇| 国产一级毛片在线| 亚洲专区一区二区在线观看| 亚洲av无码成人专区| 欧美α片免费观看| 白浆免费视频国产精品视频| 亚洲精品成人片在线播放| 国产视频a| 红杏AV在线无码| 黄色在线不卡| 国产精品va| 一区二区在线视频免费观看| 九色视频在线免费观看| 亚洲高清在线天堂精品| 午夜福利在线观看成人| 欧美精品另类| 视频二区欧美| 色老二精品视频在线观看| 日韩在线播放欧美字幕| 日韩精品无码不卡无码| 国产女人18水真多毛片18精品|