天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

多核編程的藝術(shù)_1.4 源代碼到匯編語言的轉(zhuǎn)換

發(fā)布時間:2016-12-20 17:38

  本文關(guān)鍵詞:多核應(yīng)用編程實戰(zhàn),由筆耕文化傳播整理發(fā)布。


> 其他綜合 > 多核應(yīng)用編程實戰(zhàn) 1.4 源代碼到匯編語言的轉(zhuǎn)換 2013-05-17 14:22:05         我要投稿   

本文所屬圖書 > 多核應(yīng)用編程實戰(zhàn)

面向主流平臺打造多核應(yīng)用程序,真正實現(xiàn)高性能與高可擴(kuò)展性并舉!多核應(yīng)用編程實戰(zhàn)》是一本全面、實用的高性能多核應(yīng)用編程指南,不僅介紹了在Windows、Linux和Oracle Solaris上實現(xiàn)并行化的前沿方法,而且通...  立即去當(dāng)當(dāng)網(wǎng)訂購

處理器執(zhí)行指令,指令是所有計算的基本構(gòu)建塊,執(zhí)行如加法、從內(nèi)存提取數(shù)據(jù)或?qū)?shù)據(jù)存儲回內(nèi)存等任務(wù)。指令在寄存器上進(jìn)行操作,寄存器保存變量的當(dāng)前值和其他機(jī)器狀態(tài)?紤]代碼清單1-1所示的代碼段,其功能為遞增指針ptr指向的整型變量。

代碼清單1-1 將某個地址的變量+1的代碼

void func( int * ptr )

{

    ( *ptr )++;

}

代碼清單1-2顯示了此代碼段編譯為SPARC匯編代碼的結(jié)果。

代碼清單1-2 將某個地址的變量+1的SPARC匯編代碼

ld      [%o0], %o5     //將地址%o0的值加載到寄存器%o5

add     %o5, 1, %o5    //將寄存器%o5的值加1

st      %o5, [%o0]     //將寄存器%o5的值存回地址%o0

retl                   //從例程返回

SPARC代碼[①]通過寄存器%o0傳遞指針ptr。加載指令將該地址的值載入寄存器%o5。接著增加寄存器%o5的值,接著存儲指令將寄存器%o5中的新整數(shù)值存儲到%o0所指向的內(nèi)存位置,最后返回指令退出例程。

代碼清單1-3顯示了這一源代碼基于32位x86處理器的編譯結(jié)果,x86的匯編代碼確實與SPARC匯編代碼有所不同。第一個不同之處在于32位模式的x86有一個基于棧的調(diào)用約定。這意味著傳遞給函數(shù)的所有參數(shù)都將存儲到棧,而之后函數(shù)要做的第一件事就是取回存儲在棧的參數(shù)。因此,代碼做的第一件事就是從棧中加載指針的值(在本例中,就是從地址%esp+4獲取值,然后將值放入寄存器%eax。

代碼清單1-3 將某個地址的值+1的32位x86匯編代碼

movl     4(%esp), %eax  //將地址%esp+4中的值加載到%eax

addl     $1, (%eax)     //將地址%eax中的值+1

ret                     //從例程返回

接下來,我們遇到了x86和SPARC匯編語言的第二個區(qū)別。SPARC是精簡指令集計算機(jī)(RISC),也就是說SPARC只有少量的簡單指令,且所有操作都必須由這些簡單的構(gòu)建塊構(gòu)成。x86則是復(fù)雜指令集計算機(jī)(CISC),,因此其指令能完成更復(fù)雜的操作。x86指令集有一個指令是將某個內(nèi)存地址中的值與一個增量相加。在本例中,寄存器%eax中存放一個地址,指令將該地址中的值加1。執(zhí)行這條CISC指令,即能達(dá)到SPARC 3條RISC指令的執(zhí)行結(jié)果。

為了進(jìn)行計算,這兩個代碼段都使用了兩個寄存器。SPARC的代碼中使用了寄存器%o0和%o5,而x86代碼則使用了%esp和%eax。然而,兩個代碼段使用寄存器的目的不同。x86代碼將寄存器%esp用作棧指針,指向保存函數(shù)調(diào)用參數(shù)的內(nèi)存區(qū)。與之不同,SPARC代碼則用寄存器傳遞函數(shù)參數(shù)。傳遞參數(shù)的方法稱為調(diào)用約定,是平臺應(yīng)用程序二進(jìn)制接口(ABI)的一部分。該規(guī)范說明應(yīng)該怎樣編寫程序才能使其在某個特定平臺上正確運(yùn)行。

這兩個代碼段都使用一個寄存器保存要訪問的內(nèi)存地址。SPARC的代碼中使用%o0,x86代碼中使用%eax。兩個代碼段的另一區(qū)別是SPARC代碼中用寄存器%o0保存變量的值,因此SPARC的代碼不得不使用3條指令加載值,加1,然后將結(jié)果存回內(nèi)存。相比之下,x86代碼只用了一條指令。

兩個處理器之間的又一個不同之處是可用寄存器的數(shù)量。SPARC實際上有32個通用寄存器,而x86處理器只有8個通用寄存器。由于某些通用寄存器具有特殊功能,最終SPARC處理器有約24個寄存器可供應(yīng)用程序使用,而32位x86處理器只有6個可用于應(yīng)用程序。然而,由于x86處理器采用CISC指令集,所以并不需要使用寄存器來保存暫時需要的值,在本例中,變量在內(nèi)存中的當(dāng)前值甚至并未加載到寄存器。因此,盡管x86處理器寄存器數(shù)量少得多,仍然可以編寫代碼,因此寄存器不是問題。

但不可否認(rèn),寄存器數(shù)量多確實有優(yōu)勢。如寄存器數(shù)量不足,寄存器就不得不在清空前先將其內(nèi)容存儲到內(nèi)存,使用后再將原內(nèi)容從內(nèi)存重新載入。這稱為寄存器溢出與載入,需要兩個額外的指令,并需使用緩存空間。

x86的64位指令集擴(kuò)展中引入的兩個性能優(yōu)勢就是寄存器數(shù)量增加以及調(diào)用約定大為改進(jìn)。

點(diǎn)擊復(fù)制鏈接 與好友分享!回本站首頁 您對本文章有什么意見或著疑問嗎?請到論壇討論您的關(guān)注和建議是我們前行的參考和動力   上一篇:1.3 多處理器系統(tǒng)的特征 下一篇:1.4.1 32位與64位代碼的性能 相關(guān)文章

1.4 猜數(shù)游戲

1.4 職業(yè)道德

1.4.1 了解你的領(lǐng)域

1.4.2 堅持學(xué)習(xí)

1.4.3 練習(xí)

1.4.4 合作

1.4.5 輔導(dǎo)

1.4.6 了解業(yè)務(wù)領(lǐng)域

1.4.7 與雇主/客戶保持一致

1.4.8 謙遜

圖文推薦


  本文關(guān)鍵詞:多核應(yīng)用編程實戰(zhàn),由筆耕文化傳播整理發(fā)布。



本文編號:221281

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/221281.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶492b8***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com
成人亚洲国产精品一区不卡| 男女午夜福利院在线观看| 亚洲精品国产主播一区| 国产精品一区日韩欧美| 嫩草国产福利视频一区二区| 中文字幕日产乱码一区二区| 亚洲男女性生活免费视频| 熟女少妇一区二区三区蜜桃| 老富婆找帅哥按摩抠逼视频| 草草夜色精品国产噜噜竹菊| 日本熟女中文字幕一区| 隔壁的日本人妻中文字幕版| 国产欧洲亚洲日产一区二区| 九九热在线视频观看最新| 熟女乱一区二区三区丝袜| 男人操女人下面国产剧情| 色鬼综合久久鬼色88| 国产精品日韩精品一区| 国产日韩欧美综合视频| 久久人妻人人澡人人妻| 国产精品一区二区丝袜| 日韩三级黄色大片免费观看| 年轻女房东2中文字幕| 欧洲日本亚洲一区二区| 91偷拍裸体一区二区三区| 自拍偷拍福利视频在线观看| 好吊色免费在线观看视频| 国产精品一级香蕉一区| 日韩一区二区三区在线欧洲| 99久久成人精品国产免费| 国产伦精品一一区二区三区高清版| 国产精品久久三级精品| 国产99久久精品果冻传媒| 色婷婷中文字幕在线视频| 欧美成人精品国产成人综合| 精品人妻久久一品二品三品| 欧美精品日韩精品一区| 麻豆一区二区三区精品视频| 五月婷婷缴情七月丁香| 九九热这里只有精品视频| 丰满少妇被猛烈插入在线观看|