并行編程2——多核體系架構

1.1 ?多核處理器定義

多內核處理器架構是指:芯片設計工程師在單個處理器中集成兩個或多個 “執行內核(即計算引擎)”。多內核處理器可直接插入到單一處理器基座中。但是,操作系統會把它的每個執行內核作為獨立的邏輯處理器,為其分配相應的執行資源。要利用多核處理器的運算能力,需要改寫操作系統和編譯器,廣泛使用的vista, vin7 等都能支持多核體系架構。

1.2 ?多核發展趨勢

首先思考一個問題: 為什么微處理器要從單核轉向多核?

答案是: 功耗問題限制了單核不斷提高性能的發展途徑.
有幾個簡單的公式可以說明這個問題:

1)??? 處理器性能 = 主頻 * IPC , 主頻是指每秒時鐘周期數,比如1Ghz,是每秒10億個時鐘周期。IPC 是每個時鐘周期可以執行的指令數。

2)??? 處理器功耗 正比 電流*電壓^2*主頻, 而主頻正比電壓,所以

處理器功耗 正比 主頻^3 ,通過主頻提升性能,要面臨功耗以3次方的指數增長問題。所以主頻發展到一定程度后,自然轉到重點依靠提高ipc來提升性能,提升IPC可以通過提高指令的并行度實現,提高并行度,一是提高微處理器微架構的并行度,二是采用多核架構,(參考 : http://blogs.intel.com/china/2007/06/03/post_5/)前者已經發展了很多年,提升空間和投入產出比明顯不如后者,所有多核處理器是未來的方向。

?下面兩張圖看出家庭版PC和手機核心數目也很快突破10個。目前最新的mac pro 已經配備12個核心

圖1 :?目前最新的mac pro 已經配備12個核心

圖2?三星也推出了8核手機處理器

雖然商用多核(multicore)和眾核(many-core)系統越來越普遍,成本也越來越低,游戲設備、手機等移動設備也具備越來越多的核心,并發和并行越來越成為必要的技術手段,但多核程序的發展依然沒有跟上硬件的發展,很多游戲引擎和網絡引擎都還是單線程的。原因就是第一章提到的多核編程的難度。

1.3?一個多核處理器架構例子

這是基于共享緩存的多核體系架構的一個例子,一共有10個核心,不需要深入了解,這張圖唯一的目的就是給大家一個概念,現代的處理器架構已經比幾十年前的馮諾依曼體系復雜多了(各種box),里邊稍微值得關注的是Cbox ,Bbox ,這兩個組件是緩存控制器,負責非常核心的功能:緩存一致性。緩存一致性會在后續文章描述。

這張圖是intel多核體系架構(雙路)的緩存示意圖,每個core擁有自己的L1和L2緩存,屬于一個物理CPU的core共享L3緩存。不同cpu之間通過QPI交互L3數據。每個CPU有自己的內存控制器。對多核編程而言,緩存是非常重要的底層概念。

1.4 Linux 線程核綁定

這么多核具體到編程是如何使用的?

在linux平臺提供了核親和性機制,進程和線程都可以通過設置親和性綁定到不同的核心上。

進程版本:

#include <sched.h>

void setProcessToCPU(int _cpuID)

{

????cpu_set_t mask;

????cpu_set_t get;

?

????CPU_ZERO(&mask);

????CPU_SET(_cpuID, &mask);

?

????if (sched_setaffinity(0, sizeof(mask), &mask) < 0) {

????????cout << "set process affinity failed\n" << endl;

????}

????CPU_ZERO(&get);

????if (sched_getaffinity(0, sizeof(get), &get) < 0) {

????????cout << "get process affinity failed\n" << endl;

????}

}

?

線程版本:

#include <pthread.h>

#include <sched.h>

void setThreadToCPU(int _cpuID)

{

????cpu_set_t mask;

????cpu_set_t get;

?

????CPU_ZERO(&mask);

????CPU_SET(_cpuID, &mask);

?

????if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {

????????cout << "set thread affinity failed\n" << endl;

????}

????CPU_ZERO(&get);

????if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {

????????cout << "get thread affinity failed\n" << endl;

????}

}

?

轉載于:https://www.cnblogs.com/jiayy/p/3243842.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259506.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

21:蘋果和蟲子2

團隊QQ&#xff1a;466373640個人博客&#xff1a;www.doubleq.winc/noi/信息學奧數博客&#xff1a;http://www.cnblogs.com/zwfymqz 1:蘋果和蟲子2 查看提交統計提問總時間限制:1000ms內存限制:65536kB描述你買了一箱n個蘋果&#xff0c;很不幸的是買完時箱子里混進了一條蟲子…

php運行代碼運行退出為0,php – Selenium測試用例返回進程以退出代碼0結束

你使用“phpunit yourTestCase.php”而不是“php yourTestCase.php”嗎&#xff1f;我使用phpunit(3.5.14)和“selenium-server-standalone-2.0rc2.jar”運行你的testfile,沒有問題(除了測試本身失敗)&#xff1a;PHPUnit 3.5.14 by Sebastian Bergmann.ETime: 10 seconds, Mem…

Xcode6中使用initWithTitle:title image:image selectedImage:自定義圖片

使用xcode6來運行項目&#xff0c;發現使用原生的tabbar上的圖片不顯示了。這個問題是因為xcode6中的一些api方法被廢棄了,同時tabbar上圖片的渲染方式發生了改變。先看xcode6中的tabbar api方法的變更&#xff1a;- (void)setFinishedSelectedImage:(UIImage *)selectedImage …

[Node.js]get/post請求

摘要 在很多情況下&#xff0c;我們的web服務器都需要接受客戶端瀏覽器傳遞的參數或者數據。最常見的是get和post請求。 獲取get請求的內容 get請求傳遞的參數在url中&#xff0c;參數部分在?后面。因此可以手動解析后面的內容作為get請求的參數。node.js中url模塊中的parse函…

MyEclipse10 Tomcat7 JDK1.7 配置

第一步.MyEclipse10 Tomcat7 JDK1.7下載 MyEclipse10http://downloads.myeclipseide.com/downloads/products/eworkbench/indigo/installers/myeclipse-10.0-offline-installer-windows.exe Tomcat http://tomcat.apache.org/ Java SE Development Kit 7 WINDOWS版 http://www…

類的靜態成量變量必須初始化

因為類的靜態成員變量是所有實例共用的.所以得在類外初始化. 調用的時候可以通過對象調用,也可以通過類直接調用 classA { public: inti; //有默認值}; classB { public: staticintn;staticA Aobj;}; intB::n 1; //靜態成員變量的初始化A B::Aobj; //靜態…

2階節IIR算法C語言源碼

純C語言軟件算法&#xff0c;沒有做過多優化&#xff0c;只是實現了基本IIR算法 /****************************************************************************** * 二階IIR濾波器單元,采用直接II型 * 由多個2階節&#xff0c;可以組成更多高階的濾波器 * 根據參數的不同&a…

HDU 3709 Balanced Number (數位DP)

題意 求出[x, y] 范圍內的平衡數&#xff0c;平衡數定義為&#xff1a;以數中某個位為軸心&#xff0c;兩邊的數的偏移量為矩&#xff0c;數位權重&#xff0c;使得整個數平衡。 思路 外層枚舉平衡點&#xff0c;然后數位DP即可。設計狀態&#xff1a; dp[pos][o][left_right] …

跳過 Windows RT的UI

RT啟動進入常規桌面 微軟Surface RT發布的時間已經不短了&#xff0c;相信很多朋友都已經熟悉了這個全新的平板&#xff0c;并且已經上手。Surface RT開機默認進入的界面為Windows UI&#xff0c;這對于經常使用App的朋友來說并沒有什么&#xff0c;但是對于那些經常使用Office…

matlab調用mstg,實驗五 雙線性變換法設計IIR數字濾波器

實驗五 IIR 數字濾波器設計一、實驗目的(1)熟悉用雙線性變換法設計IIR 數字濾波器的原理與方法&#xff1b;(2)學會調用MATLAB 信號處理工具箱中濾波器設計函數設計各種IIR 數字濾波器&#xff0c;學會根據濾波需求確定濾波器指標參數。(3)掌握IIR 數字濾波器的MATLAB 實現方法…

Android知識點剖析系列:深入了解layout_weight屬性

前言 Android中layout_weight這個屬性對于經常搗鼓UI的我們來說&#xff0c;肯定不會陌生。但是我們在真正使用這個屬性時&#xff0c;經常會出現一些莫名奇妙的布局效果&#xff1b;如果僅僅知其然而不知其所以然&#xff0c;一些意外的布局效果一定讓我們頗為頭疼。在本文中&…

C++ 中explicit的使用

C提供了關鍵字explicit&#xff0c;可以阻止不應該允許的經過轉換構造函數進行的隱式轉換的發生。聲明為explicit的構造函數不能在隱式轉換中使用。 C中&#xff0c; 一個參數的構造函數(或者除了第一個參數外其余參數都有默認值的多參構造函數)&#xff0c; 承擔了兩個角色。1…

BZOJ 1026 windy數 (數位DP)

題意 區間[A,B]上&#xff0c;總共有多少個不含前導零且相鄰兩個數字之差至少為2的正整數&#xff1f; 思路 狀態設計非常簡單&#xff0c;只需要pos、limit和一個前驅數pre就可以了&#xff0c;每次枚舉當前位時判斷是否與上一位相差2即可。一個需要注意的地方是第一位不用比較…

oracle診斷,Oracle?診斷事件列表

Oracle 診斷事件列表(2013-03-26 18:05:26)標簽&#xff1a;oracle診斷事件itORA-10000: controlfile debug event, name control_fileORA-10001: controlfile crash event1ORA-10002: controlfile crash event2ORA-10003: controlfile crash event3ORA-10004: controlfile cra…

考研數學:【以錯補錯】 降低做題出錯率

考研數學&#xff1a;以錯補錯 降低做題出錯率  眾所周知&#xff0c;數學需要做題&#xff0c;需要通過做題來鞏固掌握&#xff0c;但很多同學卻陷入了題海戰術&#xff0c;把所有的精力都放在數學練習上&#xff0c;一門心思做題&#xff0c;可幾個月下來卻沒有進展&#x…

treeview右鍵添加新節點

private void advTree1_MouseDown(object sender, MouseEventArgs e){if (e.Button MouseButtons.Right)//判斷你點的是不是右鍵{Point ClickPoint new Point(e.X, e.Y);Node CurrentNode advTree1.GetNodeAt(ClickPoint);if (CurrentNode ! null)//判斷你點的是不是一個節點…

RPM方式安裝MySQL5.6

RPM方式安裝MySQL5.6 rpm -ivh MySQL-server-5.6.25-1.linux_glibc2.5.x86_64.rpm rpm -ivh MySQL-client-5.6.25-1.linux_glibc2.5.x86_64.rpm rpm -ivh MySQL-devel-5.6.25-1.linux_glibc2.5.x86_64.rpm rpm -ivh MySQL-embedded-5.6.25-1.linux_glibc2.5.x86_64.rpm rpm -iv…

centos7靜默搭建oracle11g,Linux靜默安裝Oracle方法(centos7+oracle11g)

1、 增加虛擬內存ddif/dev/zero of/swapadd bs1024 count2006424mkswap /swapaddswapon /swapadd2、 檢查依賴包rpm -q binutils compat-libstdc-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c glibc-2.5 glibc-common glibc-devel glibc-headers ksh libaio libaio-dev…

Ms SQL Server 約束和規則

一、SQL約束 約束定義關于列中允許值的規則&#xff0c;是強制完整性的標準機制。 使用約束優先于使用觸發器、規則和默認值。查詢優化器也使用約束定義生成高性能的查詢執行計劃。 1&#xff1a;類型 約束的類型一共分三種 域約束&#xff1a; 涉及一個或多個列&#xf…

Qt 獨立運行時伴隨CMD命令窗口

用Qt寫了一個小軟件&#xff0c;在把程序release后&#xff0c;打包分裝后&#xff0c;發現程序運行的時候會伴隨cmd命令窗口&#xff0c;可把我愁懷了 不過功夫不負有心人&#xff0c;在老師和我網友的幫助下&#xff0c;終于搞完了 CONFIG&#xff1a;指定工程配置和編譯參數…