天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产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
亚洲天堂久久精品成人| 亚洲av在线视频一区| 欧美不雅视频午夜福利| 色综合视频一区二区观看| 久久本道综合色狠狠五月| 五月婷婷缴情七月丁香| 青青免费操手机在线视频| 亚洲在线观看福利视频| 人妻熟女中文字幕在线| 色综合久久中文综合网| 好吊妞视频这里有精品| 欧美黑人暴力猛交精品| 91欧美亚洲视频在线| 成人国产激情福利久久| 亚洲熟女一区二区三四区| 天堂热东京热男人天堂| 亚洲熟女精品一区二区成人| 欧美日韩综合在线精品| 久久综合亚洲精品蜜桃| 男女午夜在线免费观看视频| 久草精品视频精品视频精品 | 粉嫩国产美女国产av| 免费在线观看激情小视频| 人妻熟女欲求不满一区二区| 日本精品免费在线观看| 制服丝袜美腿美女一区二区| 欧美尤物在线观看西比尔| 国产精品人妻熟女毛片av久久| 69老司机精品视频在线观看| 在线观看视频成人午夜| 亚洲一区二区三区在线免费| 中国黄色色片色哟哟哟哟哟哟| 亚洲最新的黄色录像在线| 丰满人妻一二区二区三区av| 扒开腿狂躁女人爽出白浆av| 色一情一乱一区二区三区码| 午夜资源在线观看免费高清| 毛片在线观看免费日韩| 日本不卡视频在线观看| 男人大臿蕉香蕉大视频| 不卡中文字幕在线免费看|