TW201820122A - 用於可變長度整數編碼的指令集 - Google Patents

用於可變長度整數編碼的指令集 Download PDF

Info

Publication number
TW201820122A
TW201820122A TW106126776A TW106126776A TW201820122A TW 201820122 A TW201820122 A TW 201820122A TW 106126776 A TW106126776 A TW 106126776A TW 106126776 A TW106126776 A TW 106126776A TW 201820122 A TW201820122 A TW 201820122A
Authority
TW
Taiwan
Prior art keywords
varint
instruction
size
encoded
encoding
Prior art date
Application number
TW106126776A
Other languages
English (en)
Inventor
維諾德 哥帕
詹姆斯 吉佛德
Original Assignee
美商英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商英特爾股份有限公司 filed Critical 美商英特爾股份有限公司
Publication of TW201820122A publication Critical patent/TW201820122A/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

用於可變長度整數(varint)編碼的指令集和相關方法及設備。該指令集包括用於將varint編碼及解碼的指令,並可被包括為用於諸如x86和Arm式架構的處理器架構之指令集架構(ISA)以及其他ISA的一部份。在一態樣中,該等指令包括:用以將varint的大小編碼的varint大小編碼指令;用以將varint編碼的varint編碼指令;用以將經編碼之varint的大小解碼的varint大小解碼指令;以及用以將經編碼之varint解碼的varint解碼指令。可將varint編碼大小和編碼指令組合於單一指令中。同樣地,可將varint解碼大小和解碼指令組合於單一指令中。在一態樣中,該等指令使用將varint編碼成一個以上之VLQ八位元組的可變長度量(VLQ)編碼方案。

Description

用於可變長度整數編碼的指令集
本發明有關於用於可變長度整數編碼的指令集。
諸如Google、Facebook、Microsoft、和Amazon的公司會處理大規模的資料。雲端運算和大型網際網路服務的運算平台經常主宿於大型資料中心,被稱為倉儲級電腦(WSC)。此種倉儲級電腦的設計挑戰和傳統伺服器或代管服務的相當不同,並大規模地為了效能和成本效益而著重於在數千個運算節點上之網際網路級服務的系統設計。其資料處理的一個顯著部份是與處理大整數有關。
最近,Google的研究員發表了一份論文,(Kanev、Svilen等人之「剖析倉儲級電腦(Profiling a warehouse-scale computer)」,2015年ACM/IEEE第42屆電腦架構(ISCA)年度國際研討會,IEEE,2015),其中他們 報告了在大約三年期間之一系列Google生產叢集的工作量剖析資訊。雖然研究員在應用程式內發現了某種熱點行為,他們識別出在多個應用程式上構成總體資料中心循環的一重要部份之共用程序。這些熱點大多具有獨特的功能來執行超越單一機器-被稱為「資料中心稅(datacenter tax)」之組件的運算,諸如遠端程序呼叫、協定緩衝區序列化及壓縮。研究員假設此種「稅」提出了可被應用於未來資料中心最佳化伺服器晶片系統(SoC)之微架構最佳化(例如:核心內和核心外加速器)的有趣機會。
如第1圖所示,WSC循環的22~27%被花費在資料中心稅的差成分。在此之中為協定緩衝區處理及管理。根據前述論文,協定緩衝區為Google內資料儲存及傳輸的共用語言。代碼中針對WSC之最常見的成語之一是將資料序列化至協定緩衝區,執行遠端程序呼叫同時將序列化之協定緩衝區傳遞至該遠端呼叫者,以及取回需要反序列化的類似序列化之回應。用語「序列化」是指將結構化資料轉換成位元組流,通常不是用於儲存就是用於通訊。反向作業被稱為「反序列化」,但Google稱其為「剖析」。序列化/反序列化碼是由protobuf編譯器自動產生,允許編程器以它們所選擇的語言來與本機類別互動。所產生的代碼為第1圖所示之protobuf部份的大部份。
900‧‧‧微架構
902‧‧‧分支預測單元(BPU)
904‧‧‧提取單元
906、948‧‧‧指令轉換後備緩衝區(ITLB)
908‧‧‧64KB指令儲存器
910‧‧‧提取佇列
912‧‧‧解碼器(DEC)
914‧‧‧暫存器重新命名方塊
916‧‧‧重新排序緩衝區(ROB)
918、920、922‧‧‧保留站單元(RSU)
924‧‧‧分支算術邏輯單元(BR/ALU)
926‧‧‧ALU/MUL(乘法器)/BR
928、930‧‧‧位移/ALU
932、934‧‧‧載入/儲存方塊
936、938‧‧‧向量/浮點(VFP)Neon方塊
940‧‧‧VFP Neon密碼方塊
942‧‧‧L2控制方塊
944‧‧‧整數暫存器
946‧‧‧VFP和Neon暫存器
950‧‧‧64KB指令儲存器
藉由參照以下詳細說明同時配合附圖,前述 態樣和許多本發明隨之而來的優點將隨其變得更好理解而變得更易於領會,其中在各種視圖中,類似的元件符號是指類似的部件,除非有另外加以指明:第1圖是依據Google在其伺服器所實施的量測來解說資料中心「稅」之等級的圖表;第2圖是解說用於將可變長度量(VLQ)位元組編碼之編碼格式的圖式;第3a圖和第3b圖是解說VLQ編碼的圖式,其中第3a圖對應於使用大在前排列法位元組順序來將整數編碼,而第3b圖對應於使用小在前排列法位元組順序的整數之編碼;第4圖是解說應用於106903之varint(可變長度整數)的可變長度整數編碼大小指令之結果的圖式;第5a圖至第5c圖是解說與執行應用於varint 106903的varint編碼指令有關之各種作業的圖式;第6圖是解說在使用VLQ編碼之varint編碼指令的一實施例下如何使用10位元組來將8位元組整數編碼的圖式;第7圖是解說用於將使用第5a圖至第5c圖所示之作業來加以編碼之varint 106903的大小解碼之程序的圖式;第8a圖至第8c圖是解說用於將使用第5a圖至第5c圖所示之作業來加以編碼之varint 106903解碼之程序的圖式; 第9圖是解說Arm式微架構之範例的示意方塊圖;第10a圖至第10d圖是解說使用Arm式varint編碼指令來產生位元組緊縮(byte-packed)經編碼之varint位元組流的範例的圖式,其中第10a圖解說在將第一varint 10592663編碼中所進行的作業,第10b圖解說在將第二varint 105926632979112352編碼中所進行的作業,第10c圖解說在將第三varint 9776547編碼中所進行的作業,而第10d圖解說在將第四varint 7039567833107374484編碼中所進行的作業;以及第11a圖至第11d圖是解說使用Arm式varint解碼指令來將第10a圖至第10d圖中所產生的位元組緊縮經編碼之varint位元組流解碼的範例的圖式,其中第11a圖解說在將第一經編碼之varint 10592663解碼中所進行的作業,第11b圖解說在將第二經編碼之varint 105926632979112352解碼中所進行的作業,第11c圖解說在將第三經編碼之varint 9776547解碼中所進行的作業,而第11d圖解說在將第四經編碼之varint 7039567833107374484解碼中所進行的作業。
【發明內容】及【實施方式】
在此敘述用於可變長度整數編碼的指令集和相關方法及設備的實施例。在以下敘述中,提出許多具體細節以供徹底了解本發明的實施例。但熟習相關技藝者將 認知到,本發明可不需一個以上的該等具體細節來加以施行,或是可藉由其他方法、組件、材料等來加以施行。在其他情況中,並未詳細顯示或敘述已知結構、材料、或作業,以避免模糊本發明的態樣。
本說明書中不斷提到的「一實施例」或「實施例」是表示,連同該實施例所述之特定特徵、結構、或特性被包括在本發明的至少一實施例中。因此,在本說明書中各處所出現的用語「在一實施例中」或「在實施例中」並不一定都指相同的實施例。此外,在一個以上的實施例中,可以任何合適的方式來組合特定特徵、結構、或特性。
為了明確性,此處圖式中的各別組件亦可由它們在圖式中的標記所指出,而非由特定的元件符號所指出。另外,可藉由接有表示「典型」之「(typ)」的元件符號來顯示指出特定類型之組件(對比於特定組件)的元件符號。將了解到,這些組件的組態將為可能存在但為了簡明而未顯示於圖式中的典型之類似組件,或是並未以個別元件符號加以標記的類似組件。反之,「(typ)」不應被解讀為表示該組件、元件等是典型上用於其所揭示之功能、實作、目的等。
Protobuf被設計為快速及小巧,且在Google被廣泛地使用。實際效能在某種意義上是雙重資料相依的。也就是說,其取決於被序列化的實際資料,但其亦取決於所使用的資料格式。據此,某些格式會比其他的快,而對 於給定格式,某些資料將比其他資料快。
協定緩衝區的基本典範是使用者定義數個「訊息」,其中各「訊息」描述某資料結構的格式。這些訊息描述與XML概要類似。然後編譯器將這些訊息編譯成代碼,對於C++而言會導致各訊息類型的C++類別。同樣地,對於Java而言,會有各訊息類型的Java類別。
為了將資料序列化,應用程式將其資料複製到類別實例,然後令其將其本身序列化(經由該類別序列化方法)。為了使序列化之資料返回至其原始形式(還原序列化),應用程式可將資料流剖析成類別實例,然後查詢其獲得了什麼資料。
大致上來說,在高階時,有被寫入資料流或從資料流所剖析的兩種資料:整數和字串。整數通常被寫為「varint」或是可變長度整數。Varint被寫為1和10位元組之間,取決於被寫入之值。
字串被寫為長度的varint,接續有字串的位元組。因此,在某種意義上,可將序列化程序視為具有三個成分:
1.判斷什麼資料存在且應被寫入(例如:雜項控制邏輯)。
2.寫入varint。
3.Memcopy字串。
剖析資料流是類似的,除了還有可被調用之用於分配記憶體的成分。
有相關的兩組方法,其一是寫入序列化之資料,而其一為僅計算前者的長度。當序列化至記憶體緩衝區時,第一遍歷計算序列化之資料的大小,然後在檢查緩衝區的大小之後,第二遍實際將其寫入。
在本說明書中,我們聚焦於讀取/寫入varint的問題,並提供綜合指令集架構(ISA)定義以使處理加速。
可變整數編碼的概觀
可變長度量(VLQ)是使用任意數量之位元組來表示任意大之整數的代碼。其本質上為無符號整數加上第八位元以標出位元組之延續的128基表示法。如第2圖所示,該編碼是假設保留最高有效位元以指出是否接續有另一個VLQ位元組的八位元組/位元組。若A為0,則此為該整數的最後一個VLQ位元組。若A為1,則接續有另一個VLQ位元組。B為7位元數字[0x00,0x7F]且n為該VLQ位元組的位置,其中B0為最低有效。
維基百科(https://en.wikipedia.org/wiki/Variable-length_quantity)顯示對應於整數106903之轉換的uintvar範例(大在前排列法版本),其被複製於第3a圖。在大在前排列法版本中,最高有效位元組最先被傳送(134),而最低有效位元組最後被傳送(23)。注意到,Google protobuf varint使用小在前排列法版本,其中最低有效群組的7個位元被編碼於第一個位元組,而最高有效群組位元位於最後一個位元組。第3b圖顯示106903的小在 前排列法uintvar之範例。
Varint的ISA定義彙總
在一實施例中,可將varint指令定義為兩組兩個:兩指令用於編碼以及兩指令用於解碼。在各對中,一指令進行編碼,而一指令計算編碼的大小。在各指令中,以下顯示指令定義的虛擬碼描述,其可被實行為電路或是特殊電路和具有使用在處理器技藝中已知技術的微碼流程之現存微作業(uop)的組合。實際的實作方式將取決於目標微架構和效能/面積取捨。
列表1根據一實施例顯示用於64位元varint大小編碼指令的虛擬碼。
該指令採用包含64位元暫存器的兩個運算元;來源(src)暫存器和目的地(dst)暫存器,且該src暫存器儲存將被編碼的varint,而該dst暫存器被用來儲存該指令的結果,其對應於以位元組表示的經編碼之varint的大小。如第1行所示,指令返回小於或等於10(位元組)的數字(長度)。
在第2行中,src位元被複製到暫存器中並在按 位元的基礎上與0x0000 0000 0000 0001邏輯OR,若該varint的最低有效位元(LSB)為「1」,產生與該varint相同之「值」,否則該值=varint+1。第2行中的作業確保設定至少一個有值位元(亦即「1」)。
接著,在第3行中,於值上執行反向位元掃描(BSR)指令。BSR指令搜尋最高有效設定位元(「1」位元)的來源運算元(值運算元)。若找到最高有效設定位元,其位元索引「x」會被儲存在目的運算元(暫存器用來儲存「x」之值)中。在第4行中,將x之值設定為9乘x加73。如第4行中的註解所指出的,若以ucode來加以實行,此可由載入有效位址(LEA)uop所完成。在第5行中,然後將x除以64的結果寫入至目的地暫存器。這會導致固定右移6個位元,其可選擇性地在目的地暫存器中藉由在該值上作業的位元位移指令來加以實行(例如:dst>>6)。
第4圖顯示應用於106903之varint的varint64_encode_size指令之結果。107903之值被以二進制形式儲存在src暫存器中。為了簡明而不顯示在第4圖中會位於二進制值左邊的額外位元。107903之值被複製到暫存器A中,並執行BSR指令,產生16之值,其對應於最高有效位元的位元索引「x」(x=16)。然後以二進制將此值寫入至dst暫存器。然後dst暫存器中的值(「x」)被乘9加73,其導致217的「x」之值被以二進制寫入至dst暫存器。然後dst暫存器中的位元被向右位移6個位置(將「x」除以64的結果)。最終結果為{1 1}的二進制值或十進制的 3。回到第3b圖,107903的值使用uintvar VLQ編碼而具有3個位元組的長度。
列表2根據一實施例顯示用於將64位元varint指令編碼的虛擬碼。
此指令使用被標為m128、r64、和RCX的三個運算元。m128為指向128位元目的地位址(系統記憶體中)的指標(dstptr)。該varint值(src1)被儲存在64位元的來源(scr1)暫存器中。或是,可將其儲存在128位元的來源暫存器中。該varint的大小(於上文中所判定)被儲存在RCX暫存器中。
如第4行中所示,有兩個64位元常數-一組具有0x8080808080…之十六進制值的旗標,以及具有0x7f7f7f7f7f7f…之十六進制值的遮罩。在第5行中,大小運算元被設定為RCX暫存器中的大小值。
此處的各種實施例採用平行位元存放及擷取指令,分別被稱為PDEP和PEXT。PDEP和PEXT指令為位元調處指令集2(BMI2)的一部份,由INTEL®公司於其「Haswell」系列之處理器中所引進。它們採取兩個輸 入;一者為來源,而另一者為選擇器。選擇器為點陣圖,諸如遮罩,用於選擇欲加以緊縮或拆開的位元。PEXT從來源將選出位元複製到目的地的相連低階位元;較高階目的地位元被清除。PDEP相反,對於選出位元:將相連低階位元複製到目的地的選出位元;其他的目的地位元被清除。這可被用來擷取輸入的任何位元欄,甚至進行先前可能代價高昂的許多位元等級之混洗。雖然這些指令所做的與位元等級聚集-分散SIMD指令類似,但PDEP和PEXT指令(如同其餘的BMI指令集)作業於通用暫存器上。
在第6行中,使用該varint(src1)和遮罩作為運算元,於按位元之基礎上將旗標位元與PDEP指令的結果邏輯OR(包含OR),並將該結果寫入至dstptr所指向的暫存器。PDEP使用遮罩將來源運算元中的相連低階位元轉移/分散至目的地中。PDEP指令從來源運算元取用低位元並將它們存放在目的運算元中於遮罩中所設定的對應之位元位置。目的地中的所有其他位元(遮罩中未設定的位元)被設定為零(亦即被清除)。
在第7行中,使用向右位移56個位元的varint值(src1)位元作為一運算元以及遮罩作為另一運算元來將旗標與PDEP指令邏輯OR的結果被寫入至dstprt+8位元組的位置。在第8行中,dstptr所指向之暫存器中位於[size-1]之索引的位元組中之位元(以位元組表示)被與值0x7F邏輯AND。
第5a圖至第5c圖解說64位元之varint編碼程 序,使用第4圖之範例中相同的varint=106903。如第5a圖所解說的,PDEP(scr1,mask)指令藉由將「1」插入在「0」之遮罩中具有位元值的各個位置來「分散」varint位元。透過各種作業的處理會導致*dstptr所指向之位元編碼,其與第3b圖的小在前排列法編碼相同。
第5b圖解說第7行中所進行的作業。首先,scr1值被向右位元位移56個位元。然後對scr1中經位元位移之值施加PDEP指令,使用遮罩0x7f7f7f7f7f...來作為第二運算元,導致PDEP(Src1>>56,mask)。此值被與旗標常數邏輯OR並寫入至dstptr+8位元組所指向的位置。
所產生的128位元之編碼是顯示於第5c圖。對於任何少於8位元組長的varint,較高的8個位元組之值將為0x00000000,如由位元組8、9、和10所解說的。
另一個理解編碼作業的方式是使用十六進制(hex)記法來考慮各位元組中的值,而非以個別位元等級。位於程序之各種階段的較低者(位元組7:0)之hex記法是解說於下表1。在十六進制記法中,十進制的106903=0x1A197,如第一列作為輸入值所示。
經編碼之值的上半部(亦即,位元組15:8)會僅為8080808080808080。因此,以hex表示的128位元之經編 碼值會為:8080808080808080808080808006C397
第6圖顯示大小為8位元組的未經編碼varint 800與其大小為10位元組的經編碼格式802之間的映射。如所示,位元組0:6每一者的位元被映射至經編碼格式802之位元組0:7中的對應位元,而varint 800的位元組7之位元被映射至經編碼格式802之位元組8:9中的對應位元,其中位元組9的較高六個位元將被清除(「0」)。在編碼和解碼(敘述於下文中)期間,經編碼之位元組0:9將被複製到(或讀取自)128位元之儲存器位置,其中經編碼之位元組0:7將位於dstprt所指向的位址,而位元組8:9將位於dstprt+8位元組。在使用一對循序暫存器來儲存經編碼之varint的實施例下,對應於經編碼之varint的下部804之位元組0:7將被儲存在具有dstprt之位址的第一暫存器中,而對應於經編碼之varint的上部之位元8:9將被寫入至具有dstprt+8位元組所指向之位址的第二暫存器。上部806中之位元組10:15的位元(未顯示)將取決於經編碼之位元組流中varint 800後續的varint中之位元值,如以下參照第10圖所說明的。
列表3和列表4分別顯示對應於64位元之varint大小解碼及varint解碼指令之實施例的虛擬碼。
解碼使經編碼之varint返回至它們的原始值。該varint解碼大小指令採用兩個運算元-第一個為大小,其將被寫入至64位元的目的地(dst)暫存器,而第二個為指向系統記憶體中其上儲存經編碼之varint的128位元位置(位址)的指標(srcptr)。如第2行至第4行所示,執行迴圈直到srcptr所指向之經編碼之位元組流的位元組之位元與0x80(1000 0000b)邏輯AND等於0(0000 0000b)時。這將會發生在位元組的最高有效位元(位元7)被清除的任何時候。據此,該迴圈依序評估各位元組(從srcptr所指向的位元組開始)直到找出具有已清除之位元7的位元組,針對各迴圈迭代遞增大小。然後該迴圈中斷時之大小的結果值被寫入至dst暫存器,除非該大小大於10,其會導致一般保護錯失(#GP)錯誤。
第7圖解說對應於將上面所編碼之varint的大小解碼之範例的作業。該迴圈進行按位元組之評估以從位元組0開始找出最高有效位元(MSb)為「0」的第一個位元組,例如:具有0XXX XXXX之位元型樣的第一個位元組,其中「X」代表「1」或「0」(亦即,隨意位元)。如第7圖所解說的,具有0XXX XXXX之位元型樣的第一個位 元組為位元組2。因此,經編碼之varint的經解碼之大小為3,其被寫入至dst暫存器。
第8a圖至第8c圖解說與將varint解碼有關的作業。運算元包括:經解碼之varint值,其被寫入至64位元(或128位元)的dst暫存器;指標(scrptr),指向含有經編碼之varint的128位元之記憶體塊的起始;以及RCX暫存器,其中儲存varint的長度。
在第6行中,64位元的m1和m2值分別被設定為2(8*size)-1。在目前的範例中,大小為3,且因此m1和m2=16,777,215十進制或111111111111111111111111b或0xffffff。在第7行中,值1的位元是使用(部份)PEXT(平行位元擷取)指令來加以判定。PEXT指令是常與PDEP指令成對的指令,並進行PDEP的反向作業,如第8a圖和第8b圖所解說的。PEXT指令使用遮罩來將來源運算元中的相連或非相連位元轉移至目的地中的相連低階位元位置(其中儲存該結果)。對於MASK中的各位元設定,PEXT從來源運算元擷取對應位元並將它們寫入至目的運算元的相連較 低位元中。目的地的剩餘較高位元被歸零。
如第8a圖所示,每次在遮罩中碰到「0」的位元值時,scrptr所指向之來源運算元中的對應位元(亦即,具有相同位元位置)會被越過。然後將PEXT(*srcptr,mask)的結果與m1邏輯AND來獲得值1,如第8a圖底部的位元型樣所描述的。
第8b圖解說與第8行有關的作業和對應資料。這次是在scrptr+8所指向的較高八個位元組(15:8)上進行作業。作為結果的值2位元型樣是顯示在第8b圖的底部。
第8c圖顯示第9行的作業,且對應於經解碼之varint 106903的結果被寫入至dst暫存器。為了簡潔,未顯示較高位元組位元,但它們應全為0。
除了前述兩個編碼和兩個解碼varint指令之外,亦可將額外的指令實行於ISA中。在列表5中,varint64_encode2指令以經編碼之值寫入m128,並將大小寫入至RCX中。
列表6顯示全暫存器式的variant。
可以採用x86 ISA的處理器來實行前述varint編碼和解碼指令。但這僅為示範性及非限制性,如可在各種處理器架構上實行前述指令的variant。舉例來說,考慮到RISC式Arm處理器。該等指令一般可有3個運算元。它們具有作用於通用暫存器(GPR)(例如:16或32個暫存器) 的整數純量指令,以及作用於128位元之SIMD(被稱為Neon)暫存器的向量/浮點指令。
第9圖顯示定製核心Arm處理器架構900的範例。微架構900包括:分支預測單元(BPU)902;提取單元904;指令轉換後備緩衝區(ITLB)906;64KB(千位元組)指令儲存器908;提取佇列910;複數個解碼器(DEC)912;暫存器重新命名方塊914;重新排序緩衝區(ROB)916;保留站單元(RSU)918、920、和922;分支算術邏輯單元(BR/ALU)924;ALU/MUL(乘法器)/BR 926;位移/ALU 928和930;以及載入/儲存方塊932和934。微架構900更包括:向量/浮點(VFP)Neon方塊936和938;以及VFP Neon密碼方塊940;L2控制方塊942;整數暫存器944;128位元之VFP和Neon暫存器946;ITLB 948;以及64KB指令儲存器950。
列表7顯示對應於使用Arm微架構的64位元varint編碼大小指令之一實施例的虛擬碼。
注意到,我們亦可將SIMD向量128位元暫存器variant定義為:A64_varint64_encode_size_VFP Vd.2D,Vm.2D //在一對高和低的64位元之線道中計算上述
列表8顯示對應於使用Arm微架構的64位元varint編碼指令之一實施例的虛擬碼。
列表9顯示對應於使用Arm微架構的64位元varint大小解碼指令之一實施例的虛擬碼。
亦可使用Xd作為目的地(例如:64位元的GPR)來實行前述指令。
列表10顯示對應於使用Arm微架構的64位元varint解碼指令之一實施例的虛擬碼。
第10a圖至第10d圖解說使用此處所揭示的新穎之編碼Arm式ISA指令來產生位元組緊縮經編碼之varint位元組流的範例。在本範例中,使用A64_varint64_encode_size_VFP和A64_varint64_encode_VFP指令來將一連串的四個varint 10592663、2979112352、9776547和7039567833107374484編碼,該等指令被實行來處理該等varint的每一者。可以類似方式來實行此處所述的這些指令之其他variant。
程序以第10a圖所示之狀態開始,在該狀態下,具有10592663之十進制值的第一varint 1000被接收、編碼、並加至經編碼之位元組流。一般來說,在64位元的處理器上,各varint將被接收作為64位元的二進制值,諸如64位元的未經編碼之二進制格式1002所描述的。A64_varint64_encode_size_VFP和A64_varint64_encode_VFP指令的執行將產生經編碼之varint 1004,其在dstptr所指向的位址上被加至經編碼之位元組流1006。
為了簡明,將經編碼之位元組流1006描述為 已被清除的三個循序8位元組(64位元)的快取列(亦即,各64位元的快取列皆為「0」)。如所示,經編碼之varint 1004的位元組0:7被寫入至經編碼之位元組流1006,其包括含有經編碼之varint位元而作為四位元組序列1008的位元組0:3,以及皆被寫入為「0」的剩餘位元組4:7。然後使dstprt前進四個位元組,其為10592663的編碼大小。在一實施例中,取決於經編碼之varint的大小是8個位元組或更少,而將8個位元組(位元組0:7)或16個位元組(0:7)和(8:15)寫入至該流。
第10b圖顯示第二varint 1010的處理,該第二varint 1010具有2979112352的十進制值和未經編碼的二進制格式1012。A64_varint64_encode_size_VFP和A64_varint64_encode_VFP指令的執行將產生經編碼之varint 1014,其在dstptr所指向的位址上被加至經編碼之位元組流1006。如前,經編碼之varint 1014的位元組0:7被循序寫入至位元組流1006,其被描述為包括四個位元組0:3的第一部份1016a和單一位元組:4的第二部份1016b。(注意到,位元組0:4會單純被寫入至經編碼之位元組流來作為接下來的五個位元組;第10b圖中將其分割的理由是因為繪圖尺寸限制。)然後使dstprt前進5個位元組,其為2979112352的編碼大小。
第10c圖顯示第三varint 1018的處理,該第三varint 1018具有9776547的十進制值和未經編碼的二進制格式1020。A64_varint64_encode_size_VFP和A64_varint64 _encode_VFP指令的執行將產生經編碼之varint 1022,其在dstptr所指向的位址上被加至經編碼之位元組流1006。如所示,經編碼之varint 1022的位元組0:7被循序寫入至位元組流1006,其包括被描述為四位元組序列1024的位元組0:3,而剩餘位元組4:7皆為「0」。然後使dstprt前進四個位元組,其為9776547的編碼大小。
第10d圖顯示第四varint 1026的處理,該第四varint 1026具有7039567833107374484的十進制值和未經編碼的二進制格式1028。A64_varint64_encode_size_VFP和A64_varint64_encode_VFP指令的執行將產生經編碼之varint 1030,其在dstptr所指向的位址上被加至經編碼之位元組流1006。在此情況中,經編碼之varint具有大於8個位元組的大小,因此位元組0:15被加至經編碼之位元組流1006。這包括經編碼之varint 1030的位元組0:9被循序寫入至位元組流1006,其被描述為位元組0:2部份1032a和位元組3:9部份1032b。然後使dstprt前進10個位元組,其為7039567833107374484的編碼大小。
在含有一部份(或全部)經編碼之位元組流的訊息之接收端點上,進行解碼作業以使經編碼之varint返回至它們原始未經編碼之整數形式。繼續目前的範例,第11a圖至第11d圖分別描述使用A64_varint64_Decode_size_VFP和A64_varint64_Decode_VFP指令來將varint 10592663、2979112352、9776547和7039567833107374484的經編碼之格式解碼的對應解碼作業。
一方面,將經編碼之位元組流解碼是進行與被進行來將位元組流編碼反向的作業。但明顯的差異是編碼varint大小和編碼varint指令一次僅作業於一個64位元(8位元組)的varint,而varint解碼大小和varint解碼指令作業於經編碼之位元組流中接下來的128個位元,因經編碼之varint可能可具有大於8個位元組的大小。
如第11a圖所示,A64_varint64_Decode_size_VFP指令之執行是從srcptr的目前位置開始將經編碼之位元組流1006的接下來16個位元組複製到局部暫存器1100和1102中,如位元組0:7和8:15所描述的。以和上面所論述之varint64_Decode_size指令類似的方式,A64_varint64_Decode_size_VFP指令從位元組0開始循序評估各位元組,直到其在位元組的最高有效位元中找出「0」為止,隨著每個迴圈迭代遞增大小變數。如第11a圖所示,A64_varint64_Decode_size_VFP指令判定經編碼之大小為4個位元組,其被用來作為輸入至A64_varint64_Decode_VFP指令的大小,該指令接著被執行。A64_varint64_Decode_VFP指令作業於這4個位元組,越過各位元組的最高有效位元而產生被寫入至目的地(dst)暫存器1104的經解碼之位元型樣。該第一經解碼之varint為10592663,其與在第10a圖中被編碼的第一varint相同。然後使scrptr前進第一個經編碼之varint的大小,也就是4個位元組。(注意到,可隨著經編碼之位元組流中的各位元組被處理而使scrptr一次前進一個位元組-為了簡潔,scrptr的前進在第 11a圖至第11d圖中被解說為單一作業。)
該第二經編碼之varint的解碼是顯示在第11b圖中。如前,A64_varint64_Decode_size_VFP指令之執行是從srcptr的目前位置開始將經編碼之位元組流1006的接下來16個位元組複製到局部暫存器1100和1102中。A64_varint64_Decode_size_VFP指令判定經編碼之大小為5個位元組,其被用來作為輸入至A64_varint64_Decode_VFP指令的大小,該指令接著被執行。A64_varint64_Decode_VFP指令作業於該5個位元組,越過各位元組的最高有效位元而產生被寫入至目的地(dst)暫存器1104的經解碼之位元型樣。該第二經解碼之varint為2979112352,其與在第10b圖中被編碼的第二varint相同。然後使scrptr前進第二個經編碼之varint的大小,也就是5個位元組。
該第三經編碼之varint的解碼是顯示在第11c圖中。如前,A64_varint64_Decode_size_VFP指令之執行是從srcptr的目前位置開始將經編碼之位元組流1006的接下來16個位元組複製到局部暫存器1100和1102中。A64_varint64_Decode_size_VFP指令判定經編碼之大小為4個位元組,其被用來作為輸入至A64_varint64_Decode_VFP指令的大小,其作業於該4個位元組,越過各位元組的最高有效位元而產生被寫入至目的地(dst)暫存器1104的經解碼之位元型樣。該第三經解碼之varint為9776547,其與在第10c圖中被編碼的第三varint相同。然後使scrptr前進4個位元組,也就是第三個經編碼之varint的大小。
該第四經編碼之varint的解碼是顯示在第11d圖中。A64_varint64_Decode_size_VFP指令之執行是從srcptr的目前位置開始將經編碼之位元組流1006的接下來16個位元組複製到局部暫存器1100和1102中。A64_varint64_Decode_size_VFP指令判定經編碼之大小為10個位元組,其被用來作為輸入至A64_varint64_Decode_VFP指令的大小。如所解說的,A64_varint64_Decode_VFP指令作業於位元組0:9,要求從暫存器1100和1102兩者存取資料,越過各位元組的最高有效位元而產生被寫入至目的地(dst)暫存器1104的經解碼之位元型樣。該第四經解碼之varint為7039567833107374484,其與在第10c圖中被編碼的第四varint相同。然後使scrptr前進10個位元組,也就是第四個經編碼之varint的大小。然後解碼程序會以類似方式繼續處理其餘的經編碼之位元組流(未顯示)。
此處所揭示的新穎之varint編碼和解碼指令將在處理諸如Google的Protobuf訊息所使用的可變長度整數方面提供顯著的改善。在習知方式下,用於將varint位元組流編碼和解碼的軟體指令會被以諸如C++、Java、Python等語言寫為來源碼,並由目標處理器架構的編譯器所編譯,其會產生可由具有目標處理器架構之處理器所執行的多個機器級(例如:ISA)指令。反之,對於在其ISA中採用一組varint編碼和解碼指令的處理器,編譯器會產生實質較少的機器級指令,因可使用單一指令來代替會由編譯用於將以來源碼等級寫入之varint編碼或解碼的整個方 法或功能所導致的許多指令。此外,在某些實施例中,將varint的大小和該varint本身兩者編碼或解碼可在單一指令中完成,如上所述。換言之,在來源碼層級,該語言可包括單一指令來將varint編碼或解碼-當那些單一指令被編譯時,會使用ISA varint指令來產生對應的機器級代碼。
如上所述,某些實施例可採用PDEP和PEXT ISA uop。舉例來說,可將具有現存PDEP和PEXT支援的ISA擴充來支援新的指令。一般來說,可使用微碼來實行該等PDEP和PEXT指令,或是可將整個虛擬碼實行為電路。舉例來說,在某些實施例中,可在資料路徑中藉由電路來實行經由PDEP和PEXT指令所進行的相同作業。
如上所論述的,當考慮使用微碼或電路來實行指令時,通常有面積/複雜度對效能的取捨。舉例來說,假定你有具有4行代碼的虛擬碼序列,假設每一行在作業方面來說相當簡單(例如:算術、位移…)。在一實施例下,重複使用ISA中的現存ALU電路。在此方式下,當用於實行這4行虛擬碼的指令解碼時,其將會觸發微定序器,該微定序器將使其看起來像是對應於這4行虛擬碼而執行4個較簡單的指令(uop)。在此情況中,效能將會降低,因將對此指令的4個循環用盡ALU。此類型的另一個指令可僅在4個循環後發佈。或是,將新的電路加至管線。視覺化此方法的最簡單方式是每一行的虛擬碼變成一個管階段。效能將會提高,因為對各循環來說,可將此類型的新指令發佈至管線中。作為又一個選項,可使用微碼 和電路的組合來實行此處所揭示的新指令。
此處所述之標的的進一步態樣是於以下編號之條款中加以陳述:
1.一種處理器,包含:電路和邏輯其中至少一者,被組態為實行是該處理器的指令集架構(ISA)之一部份的一組指令,該組指令與將可變長度整數(varint)編碼及解碼有關,該組指令包括:varint大小編碼指令,用以將varint的大小編碼;varint編碼指令,用以將varint編碼;varint大小解碼指令,用以將經編碼之varint的大小解碼;以及varint解碼指令,用以將經編碼之varint解碼。
2.如第1條的處理器,其中該varint大小編碼指令包含:運算碼,將該指令識別為varint大小編碼指令;來源運算元,識別其中儲存有varint的來源暫存器;以及目的地運算元,識別其中該varint大小編碼指令的結果將被寫入的目的地暫存器。
3.如第1條或第2條的處理器,其中當執行該varint大小編碼指令時會進行以下作業,包含:識別該varint中最高有效設定位元的整數索引;將該整數索引乘以9,加73,並將結果位元位移6。
4.如前述條款之任一項的處理器,其中該 varint編碼指令包含:運算碼,將該指令識別為varint編碼指令;第一運算元,包含目的地指標(dstptr);第二運算元,包含其中儲存有來源varint的64個位元或128個位元的其中一者的來源暫存器;以及第三運算元,包含其中儲存有該varint的大小的暫存器。
5.如前述條款之任一項的處理器,其中當執行該varint編碼指令時會進行以下作業,包含:將varint轉換成包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼。
6.如前述條款之任一項的處理器,其中該ISA包括平行位元存放(PDEP)指令,且當執行該varint編碼指令時會採用至少一個PDEP指令,各PDEP指令包括對應於該varint之原始或經位元位移之部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
7.如第6條的處理器,其中當執行該varint編碼指令時會進行以下作業,包含:在包含該varint和該遮罩的來源上進行第一PDEP作業;將該第一PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在目的地中;在經位元位移56個位元的來源和該遮罩上進行第二PDEP作業; 將該第二PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在自該目的地的起始偏移8個位元組的位址;以及 設定是自該目的地的起始偏移n個位元組之位元組的最高有效位元(MSB),其中n等於以位元組表示之該varint的大小。
8.如前述條款之任一項的處理器,其中該varint大小解碼指令包含:運算碼,將該指令識別為varint大小解碼指令;目的地運算元,識別其中該varint大小解碼指令的結果將被寫入的目的地暫存器;以及來源指標,指向將由該varint大小解碼指令所解碼的經編碼之varint的位置。
9.如第8條的處理器,其中當執行該varint大小解碼指令時會進行以下作業,包含:從經編碼之varint的第一個位元組開始,評估一或多個之循序位元組的每一者,直到判定被評估之位元組的最高有效位元為「0」;以及將以位元組表示之該varint的大小儲存在目的地暫存器中,該大小等於被評估之位元組的數目。
10.如前述條款之任一項的處理器,其中該varint解碼指令包含:運算碼,將該指令識別為varint解碼指令;第一運算元,包含其上將該varint解碼指令的結果寫 入的目的地;來源指標,指向將由該varint解碼指令所解碼的經編碼之varint的位置;以及第三運算元,識別其中儲存有該varint的大小的暫存器。
11.如前述條款之任一項的處理器,其中當執行該varint解碼指令時會進行以下作業,包含:將使用包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼所編碼的來源varint轉換成整數。
12.如前述條款之任一項的處理器,其中該ISA包括平行位元擷取(PEXT)指令,且當執行該varint解碼指令時會採用至少一個PEXT指令,各PEXT指令包括包含經編碼之varint的個別部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
13.如第12條的處理器,其中當執行該varint解碼指令時會進行以下作業,包含:在該經編碼之varint的下部和該遮罩上進行第一PEXT作業;在按位元的基礎上將該第一PEXT作業的結果與值m1邏輯AND來產生第一值1,其中m1=2(8*size)-1;在該經編碼之varint的上部和該遮罩上進行第二PEXT作業;在按位元的基礎上將該第二PEXT作業的結果與值m2 邏輯AND來產生第二值2,其中m2=2(8*size)-1;將值2中的位元向左位元位移56個位元來產生經位元位移之值2;以及將值1與經位元位移之值2邏輯OR。
14.如前述條款之任一項的處理器,其中該處理器採用Arm式微架構。
15.如前述條款之任一項的處理器,其中該處理器採用x86式微架構。
16.如前述條款之任一項的處理器,其中被組態為實行該組指令的電路和邏輯其中至少一者不包括微碼。
17.如前述條款之任一項的處理器,其中被組態為實行該組指令的電路和邏輯其中至少一者包括微碼。
18.一種非暫態機器可讀取媒體,其上儲存有定義處理器中的指令集架構(ISA)之電路和邏輯的半導體設計資料,該ISA包括與將可變長度整數(varints)編碼及解碼有關的一組指令,該組指令包括:varint大小編碼指令,用以將varint的大小編碼;varint編碼指令,用以將varint編碼;varint大小解碼指令,用以將經編碼之varint的大小解碼;以及varint解碼指令,用以將經編碼之varint解碼。
19.如第18條的非暫態機器可讀取媒體,其中 該varint大小編碼指令包含:運算碼,將該指令識別為varint大小編碼指令;來源運算元,識別其中儲存有varint的來源暫存器;以及目的地運算元,識別其中該varint大小編碼指令的結果將被寫入的目的地暫存器。
20.如第18條或第19條的非暫態機器可讀取媒體,其中當執行該varint大小編碼指令時會進行以下作業,包含:識別該varint中最高有效設定位元的整數索引;將該整數索引乘以9,加73,並將結果位元位移6。
21.如第18條至第20條之任一項的非暫態機器可讀取媒體,其中該varint編碼指令包含:運算碼,將該指令識別為varint編碼指令;第一運算元,包含目的地指標(dstptr);第二運算元,包含其中儲存有來源varint的64個位元或128個位元的其中一者的來源暫存器;以及第三運算元,包含其中儲存有該varint的大小的暫存器。
22.如第18條至第21條之任一項的非暫態機器可讀取媒體,其中當執行該varint編碼指令時會進行以下作業,包含:將varint轉換成包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼。
23.如第18條的非暫態機器可讀取媒體,其中該ISA包括平行位元存放(PDEP)指令,且當執行該varint編碼指令時會採用至少一個PDEP指令,各PDEP指令包括對應於該varint之原始或經位元位移之部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
24.如第23條的非暫態機器可讀取媒體,其中當執行該varint編碼指令時會進行以下作業,包含:在包含該varint和該遮罩的來源上進行第一PDEP作業;將該第一PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在目的地中;在經位元位移56個位元的來源和該遮罩上進行第二PDEP作業;將該第二PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在自該目的地的起始偏移8個位元組的位址;以及設定是自該目的地的起始偏移n個位元組之位元組的最高有效位元(MSB),其中n等於以位元組表示之該varint的大小。
25.如第18條至第24條之任一項的非暫態機器可讀取媒體,其中該varint大小解碼指令包含:運算碼,將該指令識別為varint大小解碼指令;目的地運算元,識別其中該varint大小解碼指令的結果將被寫入的目的地暫存器;以及 來源指標,指向將由該varint大小解碼指令所解碼的經編碼之varint的位置。
26.如第25條的非暫態機器可讀取媒體,其中當執行該varint大小解碼指令時會進行以下作業,包含:從經編碼之varint的第一個位元組開始,評估一或多個之循序位元組的每一者,直到判定被評估之位元組的最高有效位元為「0」;以及將以位元組表示之該varint的大小儲存在目的地暫存器中,該大小等於被評估之位元組的數目。
27.如第18條至第26條之任一項的非暫態機器可讀取媒體,其中該varint解碼指令包含:運算碼,將該指令識別為varint解碼指令;第一運算元,包含其上將該varint解碼指令的結果寫入的目的地;來源指標,指向將由該varint解碼指令所解碼的經編碼之varint的位置;以及第三運算元,識別其中儲存有該varint的大小的暫存器。
28.如第18條至第27條之任一項的非暫態機器可讀取媒體,其中當執行該varint解碼指令時會進行以下作業,包含:將使用包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼所編碼的來源varint轉換成整數。
29.如第18條至第28條之任一項的非暫態機器 可讀取媒體,其中該ISA包括平行位元擷取(PEXT)指令,且當執行該varint解碼指令時會採用至少一個PEXT指令,各PEXT指令包括包含經編碼之varint的個別部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
30.如第29條的非暫態機器可讀取媒體,其中當執行該varint解碼指令時會進行以下作業,包含:在該經編碼之varint的下部和該遮罩上進行第一PEXT作業;在按位元的基礎上將該第一PEXT作業的結果與值m1邏輯AND來產生第一值1,其中m1=2(8*size)-1;在該經編碼之varint的上部和該遮罩上進行第二PEXT作業;在按位元的基礎上將該第二PEXT作業的結果與值m2邏輯AND來產生第二值2,其中m2=2(8*size)-1;將值2中的位元向左位元位移56個位元來產生經位元位移之值2;以及將值1與經位元位移之值2邏輯OR。
31.如第18條至第30條之任一項的非暫態機器可讀取媒體,其中該處理器採用Arm式微架構。
32.如第18條至第31條之任一項的非暫態機器可讀取媒體,其中該處理器採用x86式微架構。
33.一種方法,包含:經由包括指令集架構(ISA)的處理器,將第一複數個具有可變長度的整數(varint)編碼成第一經編碼之varint位元組流,其中對於各varint而言,該varint的整數值被編碼;以及經由處理器將包括第二複數個經編碼之varint的第二經編碼之varint位元組流解碼,以將各經編碼之varint轉換成整數值,其中使用被實行為該處理器的ISA之一部份的varint編碼指令將各varint編碼,且其中使用是該處理器之ISA的一部份之varint解碼指令將該第二經編碼之varint位元組流解碼。
34.如第33條的方法,更包含:使用是該處理器的ISA之一部份的varint編碼大小指令,將該第一經編碼之varint位元組流中該第一複數個varint的每一者之以位元組表示的大小編碼。
35.如第34條的方法,其中該varint大小編碼指令包含:運算碼,將該指令識別為varint大小編碼指令;來源運算元,識別其中儲存有varint的來源暫存器;以及目的地運算元,識別其中該varint大小編碼指令的結果將被寫入的目的地暫存器。
36.如第33條或第34條的方法,其中當執行該 varint大小編碼指令時會進行以下作業,包含:對於該第一複數個varint的每一者,識別該varint中最高有效設定位元的整數索引;將該整數索引乘以9,加73,並將結果位元位移6。
37.如第33條的方法,其中使用該varint編碼指令將該第一經編碼之varint位元組流中經編碼之varint的每一者之以位元組表示的大小編碼。
38.如第33條至第37條之任一項的方法,其中該varint編碼指令包含:運算碼,將該指令識別為varint編碼指令;第一運算元,包含目的地指標(dstptr);第二運算元,包含其中儲存有來源varint的64個位元或128個位元的其中一者的來源暫存器;以及第三運算元,包含其中儲存有該varint的大小的暫存器。
39.如第33條至第38條之任一項的方法,其中當執行該varint編碼指令時,會將varint轉換成包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼。
40.如第33條至第39條之任一項的方法,其中該ISA包括平行位元存放(PDEP)指令,且當執行該varint編碼指令時會採用至少一個PDEP指令,各PDEP指令包括對應於該varint之原始或經位元位移之部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
41.如第40條的方法,其中當執行該varint編 碼指令時會進行以下作業,包含:在包含該varint和該遮罩的來源上進行第一PDEP作業;將該第一PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在目的地中;在經位元位移56個位元的來源和該遮罩上進行第二PDEP作業;將該第二PDEP作業的結果與具有0x80808080…之型樣的旗標常數邏輯OR,並將該結果儲存在自該目的地的起始偏移8個位元組的位址;以及設定是自該目的地的起始偏移n個位元組之位元組的最高有效位元(MSB),其中n等於以位元組表示之該varint的大小。
42.如第33條至第41條之任一項的方法,其中該第二經編碼之varint位元組流中經解碼之varint的每一者包括經編碼之大小,且其中該方法更包含:對於各經編碼之varint,使用是該處理器的ISA之一部份的varint解碼大小指令將該經編碼之varint的大小解碼;以及使用是該處理器的ISA之一部份的varint解碼指令將該經編碼之varint解碼。
43.如第42條的方法,其中該varint大小解碼指令包含:運算碼,將該指令識別為varint大小解碼指令; 目的地運算元,識別其中該varint大小解碼指令的結果將被寫入的目的地暫存器;以及來源指標,指向將由該varint大小解碼指令所解碼的經編碼之varint的位置。
44.如第43條的方法,其中當執行該varint大小解碼指令時會進行以下作業,包含:從經編碼之varint的第一個位元組開始,評估一或多個之循序位元組的每一者,直到判定被評估之位元組的最高有效位元為「0」;以及將以位元組表示之該varint的大小儲存在目的地暫存器中,該大小等於被評估之位元組的數目。
45.如第33條至第44條之任一項的方法,其中該varint解碼指令包含:運算碼,將該指令識別為varint解碼指令;第一運算元,包含其上將該varint解碼指令的結果寫入的目的地;來源指標,指向將由該varint解碼指令所解碼的經編碼之varint的位置;以及第三運算元,識別其中儲存有該varint的大小的暫存器。
46.如第33條至第45條之任一項的方法,其中當執行該varint解碼指令時,會將使用包括一或多個之VLQ八位元組的可變長度量(VLQ)編碼所編碼之來源varint轉換成整數。
47.如第33條至第46條之任一項的方法,其中該ISA包括平行位元擷取(PEXT)指令,且當執行該varint解碼指令時會採用至少一個PEXT指令,各PEXT指令包括包含經編碼之varint的個別部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
48.如第47條的方法,其中當執行該varint解碼指令時會進行以下作業,包含:在該經編碼之varint的下部和該遮罩上進行第一PEXT作業;在按位元的基礎上將該第一PEXT作業的結果與值m1邏輯AND來產生第一值1,其中m1=2(8*size)-1;在該經編碼之varint的上部和該遮罩上進行第二PEXT作業;在按位元的基礎上將該第二PEXT作業的結果與值m2邏輯AND來產生第二值2,其中m2=2(8*size)-1;將值2中的位元向左位元位移56個位元來產生經位元位移之值2;以及將值1與經位元位移之值2邏輯OR。
49.如第33條至第48條之任一項的方法,其中該處理器採用Arm式微架構。
50.如第33條至第48條之任一項的方法,其中該處理器採用x86式微架構。
51.如第33條至第50條之任一項的方法,其中該等varint的每一者具有以位元組表示之範圍從1至8個位元組的未經編碼之大小。
52.如第33條至第51條之任一項的方法,其中該第一和第二經編碼之varint位元組流的每一者採用小在前排列法位元組順序。
53.如第33條至第51條之任一項的方法,其中該第一和第二經編碼之varint位元組流的每一者採用大在前排列法位元組順序。
另外,本說明書的實施例不僅可被實行於諸如SoC之處理器的半導體晶片內,亦可被實行於機器可讀取媒體內。舉例來說,可將上述設計儲存及/或內建於和用於設計半導體裝置之設計工具相關的機器可讀取媒體。範例包括以VHSIC硬體描述語言(VHDL)、Verilog語言或SPICE語言格式化的網路連線表。某些網路連線表範例包括:行為層級網路連線表、暫存器轉移層級(RTL)網路連線表、閘層級網路連線表和電晶體層級網路連線表。機器可讀取媒體亦包括具有諸如GDS-II檔案之佈局資訊的媒體。另外,可在模擬環境中使用用於半導體晶片設計的網路連線表檔案或其他機器可讀取媒體來進行上述教導的方法。
雖然已參照特定實作來敘述某些實施例,但根據某些實施例仍可能有其他實作。另外,不須以所解說及所述之特定方式來安排圖式中所解說及/或此處所述之 元件或其他特徵的配置方式及/或順序。根據某些實施例可能有許多其他的配置方式。
在圖式所顯示的各個系統中,某些情況中的元件可各自具有相同的元件符號或不同的元件符號,以暗示所代表的元件可不同及/或類似。但一元件可充分變通以有不同的實作並與此處所示或所述之某些或所有系統共事。圖中所顯示的各種元件可相同或不同。何者被稱為第一元件而何者被稱為第二元件是隨機的。
在說明書及申請專利範圍中,可能使用用語「耦合」和「連接」以及其衍生詞。應了解到,這些用語並不意指為彼此的同義詞。更確切來說,在特定實施例中,「連接」可被用來表示二或多個的元件彼此直接實體或電性接觸。「耦合」可表示二或多個的元件直接實體或電性接觸。但「耦合」亦可意指二或多個的元件並未彼此直接接觸,但仍彼此合作或互動。
實施例為發明的實作或範例。說明書中提到「一實施例」、「某一實施例」、「某些實施例」、或「其他實施例」是表示配合實施例所述之特定特徵、結構、或特性被包括在本發明至少某些實施例中,但不一定是全部的實施例。「一實施例」、「某一實施例」、或「某些實施例」的多次出現並不一定皆指相同的實施例。
並非此處所敘述及解說的所有組件、特徵、結構、特性等皆須被包括於特定實施例中。若說明書敘述「可」、「可能」、「可以」或「能夠」包括一組件、特 徵、結構、或特性,則舉例來說,不一定要包括該特定組件、特徵、結構、或特性。若說明書或申請專利範圍提到「一」或「一個」元件,那並不表示只有一個該元件。若說明書或申請專利範圍提到「一額外」元件,那並不排除有多於一個的該額外元件。
如上所論述的,可藉由對應之軟體及/或韌體組件及應用程式,諸如由內建處理器或類似物所執行之軟體及/或韌體,來幫助此處之實施例的各種態樣。因此,可使用本發明的實施例來作為或支援被執行於某種形式之處理器、處理核心或內建邏輯的軟體程式、軟體模組、韌體、及/或分散式軟體,運行於處理器或核心的虛擬機,或是被實行或實現於電腦可讀取或機器可讀取非暫態儲存媒體。電腦可讀取或機器可讀取非暫態儲存媒體包括用來以可由機器(例如:電腦)所讀取之形式儲存或傳送資訊的任何機構。舉例來說,電腦可讀取或機器可讀取非暫態儲存媒體包括以可由電腦或計算機器(例如:計算裝置、電子系統等)所存取的形式提供(亦即,儲存及/或傳送)資訊的任何機構,諸如可錄/非可錄媒體(例如:唯讀記憶體(ROM)、隨機存取記憶體(RAM)、磁碟儲存媒體、光學儲存媒體、快閃記憶體裝置等)。該內容可為直接可執行檔(「物件」或「可執行」形式)、原始碼、或差分碼(「差量(delta)」或「修補」碼)。電腦可讀取或機器可讀取非暫態儲存媒體亦可包括可從其下載內容的儲存器或資料庫。電腦可讀取或機器可讀取非暫態儲存媒體亦可包括在販賣或 遞送時其上儲存有內容的裝置或產品。因此,遞送具有儲存之內容的裝置、或是在通訊媒體上提供用於下載的內容可被理解為提供包含具有此處所述之此種內容的電腦可讀取或機器可讀取非暫態儲存媒體的製品。
以上被稱為此處所述之程序、伺服器、或工具的各種組件可為用於進行所述功能的手段。可藉由運行於處理元件上的軟體、經由內建硬體或類似物、或是硬體和軟體的任何組合來實行此處所述之各種組件所進行的作業及功能。可將此等組件實行為軟體模組、硬體模組、特殊用途硬體(例如:特定應用硬體、ASIC、DSP等)、內建控制器、固線式電路、硬體邏輯等。可經由包括電腦可讀取或機器可讀取非暫態儲存媒體的製品來提供軟體內容(例如:資料、指令、組態資訊等),其提供代表可被執行之指令的內容。該內容可導致電腦進行此處所述的各種功能/作業。
如此處所使用的,由詞彙「的至少一者」所連結的一列品項可表示所列品項的任何組合。舉例來說,詞組「A、B或C的至少一者」可表示:A;B;C;A和B;A和C;B和C;或A、B和C。
所解說之發明實施例的上述說明,包括摘要中所述,不應具窮舉性或將本發明限制於所揭示之拘泥形式。雖然在此是針對解說性目的而敘述發明的特定實施例和範例,但熟習相關技藝者將認定在本發明之範圍內可有各種等效之變體。
可按照以上詳細說明而對本發明做出這些修改。以下申請專利範圍中所使用的詞彙不應被解讀為將本發明限制於說明書和圖式所揭示的特定實施例。反之,本發明的範圍應由以下申請專利範圍來完整地加以判斷,以下申請專利範圍應根據既設申請專利範圍解釋之準則來加以解讀。

Claims (30)

  1. 一種處理器,包含:電路和邏輯其中至少一者,被組態為實行是該處理器的指令集架構(ISA)之一部份的一組指令,該組指令與將可變長度整數(varint)編碼及解碼有關,該組指令包括:varint大小編碼指令,用以將varint的大小編碼;varint編碼指令,用以將varint編碼;varint大小解碼指令,用以將經編碼之varint的大小解碼;以及varint解碼指令,用以將經編碼之varint解碼。
  2. 如申請專利範圍第1項的處理器,其中該varint大小編碼指令包含:運算碼,將該指令識別為varint大小編碼指令;來源運算元,識別其中儲存有varint的來源暫存器;以及目的地運算元,識別其中該varint大小編碼指令的結果將被寫入的目的地暫存器。
  3. 如申請專利範圍第1項的處理器,其中該varint編碼指令包含:運算碼,將該指令識別為varint編碼指令;第一運算元,包含目的地指標(dstptr); 第二運算元,包含其中儲存有來源varint的64個位元或128個位元的其中一者的來源暫存器;以及第三運算元,包含其中儲存有該varint的大小的暫存器。
  4. 如申請專利範圍第1項的處理器,其中當執行該varint編碼指令時會進行以下作業,包含:將varint轉換成包括一個以上之VLQ八位元組的可變長度量(VLQ)編碼。
  5. 如申請專利範圍第1項的處理器,其中該ISA包括平行位元存放(PDEP)指令,且當執行該varint編碼指令時會採用至少一個PDEP指令,各PDEP指令包括對應於該varint之原始或經位元位移之部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
  6. 如申請專利範圍第1項的處理器,其中該varint大小解碼指令包含:運算碼,將該指令識別為varint大小解碼指令;目的地運算元,識別其中該varint大小解碼指令的結果將被寫入的目的地暫存器;以及來源指標,指向將由該varint大小解碼指令所解碼的經編碼之varint的位置。
  7. 如申請專利範圍第6項的處理器,其中當執行該varint編碼指令時會進行以下作業,包含:從經編碼之varint的第一個位元組開始,評估一或多個循序位元組的每一者,直到判定被評估之位元組的最高有效位元為「0」;以及將以位元組表示之該varint的大小儲存在目的地暫存器中,該大小等於被評估之位元組的數目。
  8. 如申請專利範圍第1項的處理器,其中該varint解碼指令包含:運算碼,將該指令識別為varint解碼指令;第一運算元,包含其上將該varint解碼指令的結果寫入的目的地;來源指標,指向將由該varint解碼指令所解碼的經編碼之varint的位置;以及第三運算元,識別其中儲存有該varint的大小的暫存器。
  9. 如申請專利範圍第1項的處理器,其中該處理器採用Arm式微架構。
  10. 如申請專利範圍第1項的處理器,其中該處理器採用x86式微架構。
  11. 一種非暫態機器可讀取媒體,其上儲存有定義處理器中的指令集架構(ISA)之電路和邏輯的半導體設計資料,該ISA包括與將可變長度整數(varints)編碼及解碼有關的一組指令,該組指令包括:varint大小編碼指令,用以將varint的大小編碼;varint編碼指令,用以將varint編碼;varint大小解碼指令,用以將經編碼之varint的大小解碼;以及varint解碼指令,用以將經編碼之varint解碼。
  12. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該varint大小編碼指令包含:運算碼,將該指令識別為varint大小編碼指令;來源運算元,識別其中儲存有varint的來源暫存器;以及目的地運算元,識別其中該varint大小編碼指令的結果將被寫入的目的地暫存器。
  13. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該varint編碼指令包含:運算碼,將該指令識別為varint編碼指令;第一運算元,包含目的地指標(dstptr);第二運算元,包含其中儲存有來源varint的64個位元或128個位元的其中一者的來源暫存器;以及 第三運算元,包含其中儲存有該varint的大小的暫存器。
  14. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中當執行該varint編碼指令時會進行以下作業,包含:將varint轉換成包括一或多個VLQ八位元組的可變長度量(VLQ)編碼。
  15. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該ISA包括平行位元存放(PDEP)指令,且當執行該varint編碼指令時會採用至少一個PDEP指令,各PDEP指令包括對應於該varint之原始或經位元位移之部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
  16. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該varint大小解碼指令包含:運算碼,將該指令識別為varint大小解碼指令;目的地運算元,識別其中該varint大小解碼指令的結果將被寫入的目的地暫存器;以及來源指標,指向將由該varint大小解碼指令所解碼的經編碼之varint的位置。
  17. 如申請專利範圍第16項的非暫態機器可讀取媒體,其中當執行該varint編碼指令時會進行以下作業,包含: 從經編碼之varint的第一個位元組開始,評估一或多個循序位元組的每一者,直到判定被評估之位元組的最高有效位元為「0」;以及將以位元組表示之該varint的大小儲存在目的地暫存器中,該大小等於被評估之位元組的數目。
  18. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該varint解碼指令包含:運算碼,將該指令識別為varint解碼指令;第一運算元,包含其上將該varint解碼指令的結果寫入的目的地;來源指標,指向將由該varint解碼指令所解碼的經編碼之varint的位置;以及第三運算元,識別其中儲存有該varint的大小的暫存器。
  19. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中當執行該varint解碼指令時會進行以下作業,包含:將使用包括一或多個VLQ八位元組的可變長度量(VLQ)編碼所編碼的來源varint轉換成整數。
  20. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該ISA包括平行位元擷取(PEXT)指令,且當執行該varint解碼指令時會採用至少一個PEXT指令,各PEXT指令包括 包含經編碼之varint的個別部份的來源運算元以及包含具有0x7f7f7f7f…的型樣之遮罩的第二運算元。
  21. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該處理器採用Arm式微架構。
  22. 如申請專利範圍第11項的非暫態機器可讀取媒體,其中該處理器採用x86式微架構。
  23. 一種方法,包含:經由包括指令集架構(ISA)的處理器,將第一複數個具有可變長度的整數(varint)編碼成第一經編碼之varint位元組流,其中對於各varint而言,該varint的整數值被編碼;以及經由處理器將包括第二複數個經編碼之varint的第二經編碼之varint位元組流解碼,以將各經編碼之varint轉換成整數值,其中使用被實行為該處理器的ISA之一部份的varint編碼指令將各varint編碼,且其中使用是該處理器之ISA的一部份之varint解碼指令將該第二經編碼之varint位元組流解碼。
  24. 如申請專利範圍第23項的方法,其中使用是該處理器的ISA之一部份的varint編碼大小指令將該第一經編碼之 varint位元組流中經編碼之varint的每一者之以位元組表示的大小編碼。
  25. 如申請專利範圍第23項的方法,其中使用該varint編碼指令將該第一經編碼之varint位元組流中經編碼之varint的每一者之以位元組表示的大小編碼。
  26. 如申請專利範圍第23項的方法,其中該處理器採用Arm式微架構。
  27. 如申請專利範圍第23項的方法,其中該處理器採用x86式微架構。
  28. 如申請專利範圍第23項的方法,其中該等varint的每一者具有以位元組表示之範圍從1至8個位元組的未經編碼之大小。
  29. 如申請專利範圍第23項的方法,其中該第一和第二經編碼之varint位元組流的每一者採用大在前排列法位元組順序。
  30. 如申請專利範圍第23項的方法,其中該第一和第二經編碼之varint位元組流的每一者採用小在前排列法位元組順序。
TW106126776A 2016-09-30 2017-08-08 用於可變長度整數編碼的指令集 TW201820122A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/281,380 2016-09-30
US15/281,380 US20180095760A1 (en) 2016-09-30 2016-09-30 Instruction set for variable length integer coding

Publications (1)

Publication Number Publication Date
TW201820122A true TW201820122A (zh) 2018-06-01

Family

ID=61758825

Family Applications (1)

Application Number Title Priority Date Filing Date
TW106126776A TW201820122A (zh) 2016-09-30 2017-08-08 用於可變長度整數編碼的指令集

Country Status (5)

Country Link
US (1) US20180095760A1 (zh)
EP (1) EP3519944A1 (zh)
CN (1) CN109716291A (zh)
TW (1) TW201820122A (zh)
WO (1) WO2018063541A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10511515B1 (en) * 2017-08-29 2019-12-17 Rockwell Collins, Inc. Protocol buffer avionics system
GB201817783D0 (en) * 2018-10-31 2018-12-19 V Nova Int Ltd Methods,apparatuses, computer programs and computer-readable media for processing configuration data
WO2021037341A1 (en) * 2019-08-27 2021-03-04 Ecole Polytechnique Federale De Lausanne (Epfl) Data transformer apparatus
CN112631597B (zh) * 2019-10-09 2024-08-23 中科寒武纪科技股份有限公司 混洗方法及计算装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5774600A (en) * 1995-04-18 1998-06-30 Advanced Micro Devices, Inc. Method of pixel averaging in a video processing apparatus
GB2343969A (en) * 1998-11-20 2000-05-24 Advanced Risc Mach Ltd A data processing apparatus and method for performing an arithemtic operation on a plurality of signed data values
GB2410097B (en) * 2004-01-13 2006-11-01 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements
US7941640B1 (en) * 2006-08-25 2011-05-10 Marvell International Ltd. Secure processors having encoded instructions
JP4703730B2 (ja) * 2007-01-19 2011-06-15 三菱電機株式会社 テーブル装置、可変長符号化装置、可変長復号装置及び可変長符号化復号装置
US20080252652A1 (en) * 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
US7609000B1 (en) * 2007-10-22 2009-10-27 Google Inc. Variable-length compression technique for encoding or decoding a sequence of integers
US8180774B2 (en) * 2008-10-03 2012-05-15 Seomoz, Inc. Web-scale data processing system and method
US7773005B2 (en) * 2008-12-05 2010-08-10 Advanced Micro Devices, Inc. Method and apparatus for decoding variable length data
US20120185670A1 (en) * 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
US9336225B2 (en) * 2011-02-24 2016-05-10 A9.Com, Inc. Encoding of variable-length data with unary formats
US9170772B2 (en) * 2011-12-23 2015-10-27 Intel Corporation Method and apparatus for decimal floating-point data logical extraction
US20140082334A1 (en) * 2011-12-30 2014-03-20 Steven R. King Encoding to Increase Instruction Set Density
US9355113B2 (en) * 2013-01-17 2016-05-31 Google Inc. Encoding and decoding delta values
US9298457B2 (en) * 2013-01-22 2016-03-29 Altera Corporation SIMD instructions for data compression and decompression

Also Published As

Publication number Publication date
CN109716291A (zh) 2019-05-03
EP3519944A1 (en) 2019-08-07
US20180095760A1 (en) 2018-04-05
WO2018063541A1 (en) 2018-04-05

Similar Documents

Publication Publication Date Title
US10656944B2 (en) Hardware apparatus and methods to prefetch a multidimensional block of elements from a multidimensional array
US10223114B1 (en) Fixed point to floating point conversion
JP6699845B2 (ja) 方法及びプロセッサ
US9842046B2 (en) Processing memory access instructions that have duplicate memory indices
JP5357181B2 (ja) コンピュータ・システム、その動作方法、及び、コンピュータ・プログラム
US20200183688A1 (en) Packed data operation mask shift processors, methods, systems, and instructions
US9710279B2 (en) Method and apparatus for speculative vectorization
TWI737651B (zh) 用於加速圖形分析的處理器、方法及系統
TW201820122A (zh) 用於可變長度整數編碼的指令集
US10509580B2 (en) Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
TW201732570A (zh) 用於聚合集中及跨步的系統、裝置及方法
CN116009814A (zh) 用于经融合的乘加的系统、装置和方法
JP2011509475A (ja) コンピュータを動作させる方法及びシステム
US20090182988A1 (en) Compare Relative Long Facility and Instructions Therefore
JP2019197531A (ja) 連鎖タイル演算を実施するためのシステムおよび方法
US10761849B2 (en) Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
TW201339962A (zh) 浮點捨入處理器
US9280480B2 (en) Extract target cache attribute facility and instruction therefor
TW202132977A (zh) 資料元件比較處理器、方法、系統及指令
KR20130064797A (ko) 범용 논리 연산 방법 및 장치
US10437562B2 (en) Apparatus and method for processing sparse data
US20090182984A1 (en) Execute Relative Long Facility and Instructions Therefore
TW201333821A (zh) 用於產生迴圈調正計數或迴圈調正遮罩的系統、設備與方法
US20090182992A1 (en) Load Relative and Store Relative Facility and Instructions Therefore