MIPS走向更多
當(dāng)你在一個(gè)條件分支指令處點(diǎn)擊了單步執(zhí)行,然后看到光標(biāo)移動(dòng)到了下一條指令處,這是否意味該條件分支的條件未被滿足呢?未必,請(qǐng)注意這是MIPS 架構(gòu)的一個(gè)特性,即分支指令的下一條指令總是會(huì)被執(zhí)行,當(dāng)編譯器找不到合適的指令時(shí)會(huì)填充一條NOP 指令。你必須再執(zhí)行一次單步操作,才能確認(rèn)分支條件是否被滿足(在這種情況下,你會(huì)看到光標(biāo)跳到分支目標(biāo)處)或不滿足(光標(biāo)跳轉(zhuǎn)到下一條順序指令)。更先進(jìn)的“代碼移動(dòng)”優(yōu)化能夠?qū)е赂嗟膬?yōu)化干預(yù)。請(qǐng)記住,有時(shí)指令可以被挪動(dòng)很遠(yuǎn)的距離,甚至超出你認(rèn)為應(yīng)在的循環(huán)之外。
本文引用地址:http://cafeforensic.com/article/118542.htm不過(guò),調(diào)試優(yōu)化過(guò)的代碼也是可能的,尤其是你喜歡頭腦風(fēng)暴的話(例如,在分支指令后跟一個(gè)分支指令會(huì)發(fā)生什么?)。通常缺省的編譯器優(yōu)化只生成簡(jiǎn)單的代碼,會(huì)完整保留你的意圖即使可能它效率底下。當(dāng)調(diào)試時(shí)在斷點(diǎn)觸發(fā)處,,你可以放心地修改某個(gè)變量的值,而不用擔(dān)心編譯器會(huì)搗什么鬼(比如雖然你從源代碼中看不到,但一些賦值語(yǔ)句已經(jīng)被挪動(dòng)并執(zhí)行了)。
照片4:搞“計(jì)算”的人擅長(zhǎng)編譯優(yōu)化,如這里所示,從速度、代碼尺寸到編譯時(shí)間,有廣泛的選擇空間可選
需要緊記的是,編譯器優(yōu)化設(shè)置(見照片4)能夠產(chǎn)生很大影響。我試著跑過(guò)一個(gè)USB主機(jī)演示程序,采用了如表1 所示的不同編譯器設(shè)置,你可以看到,不同設(shè)置下(速度/大小取向、循環(huán)展開,采取MIPS-16 的16 位代碼優(yōu)化選項(xiàng))生成的代碼大小相差能夠高達(dá)2倍。
表1:聰明的編譯器總歸不錯(cuò),但是要留意可能會(huì)給調(diào)試工作帶來(lái)副作用。應(yīng)首選保證你的代碼正確工作,然后再考慮進(jìn)一步優(yōu)化
保持簡(jiǎn)潔
PIC32 在精簡(jiǎn)MIPS 架構(gòu)使其服務(wù)于嵌入式應(yīng)用方面做得很好。比如,全部的活動(dòng)功耗只有1mA/MHz 水平,從它提供的性能來(lái)看這是非常難得的。它們的批量?jī)r(jià)格也比較合理,特別考慮到那些完整的外設(shè)和存儲(chǔ)器配備。
然而競(jìng)爭(zhēng)也非常激烈,像Cortex - M3、瑞薩SH(現(xiàn)在叫RX)、愛特梅爾的AVR32 以及飛思卡爾的ColdFire 等。這些競(jìng)爭(zhēng)對(duì)手在行業(yè)里已經(jīng)有很長(zhǎng)的時(shí)間,它們的產(chǎn)品也具有很廣的覆蓋面,在高端產(chǎn)品上能提供跟PIC32類似的集成度和性能,同時(shí)還有許多入門級(jí)的簡(jiǎn)單產(chǎn)品。
我認(rèn)為MIPS 也在低端產(chǎn)品線上延伸,他們最近發(fā)布的“M14K”內(nèi)核就是明證,在保留當(dāng)前版本性能的基礎(chǔ)上,在代碼密度、中斷響應(yīng)和外設(shè)一致性上取得了非常大的進(jìn)步。
其中最深刻的變化是一套新的“microMIPS”指令集。類似于ARM 的Thumb-2,microMIPS 采用了可變長(zhǎng)度的操作碼(16 和32 位),以同時(shí)取得兩者的優(yōu)點(diǎn),即接近32位代碼的性能和16 位代碼的密度(見圖2)。定長(zhǎng)指令集是原始RISC 革命的標(biāo)志性特點(diǎn),這在當(dāng)時(shí)是合理的(雖然我并沒(méi)有覺得),但在今天,架構(gòu)師們意識(shí)到用32 位存儲(chǔ)器(即使不考慮功耗的開銷)只是做個(gè)寄存器累加或短跳轉(zhuǎn)是沒(méi)有意義的。同上,在軟件方面,編譯器和IDE 都很好,但MIPS 和Microchip 也應(yīng)該注意那些簡(jiǎn)單的替代產(chǎn)品,如ARM 的mbed、AVR 的Arduino,還有他們自己陣營(yíng)的PICAXE。有些人可能還認(rèn)為32 位芯片只是火箭科學(xué)家的事,但火箭能賣掉多少個(gè)?
圖2:MIPS M14K進(jìn)一步丟棄了“計(jì)算”架構(gòu)中的包袱,如造成代碼膨脹的32位定長(zhǎng)指令,使得在保留高性能的同時(shí),極大地減小了代碼大小
想賣出更多的芯片嗎?很簡(jiǎn)單,只要做到更低功耗低、更易使用、更便宜。然后接著再這樣繼續(xù)。
評(píng)論