TWI402766B - 繪圖處理器 - Google Patents

繪圖處理器 Download PDF

Info

Publication number
TWI402766B
TWI402766B TW097147390A TW97147390A TWI402766B TW I402766 B TWI402766 B TW I402766B TW 097147390 A TW097147390 A TW 097147390A TW 97147390 A TW97147390 A TW 97147390A TW I402766 B TWI402766 B TW I402766B
Authority
TW
Taiwan
Prior art keywords
precision
operand
operations
dfma
path
Prior art date
Application number
TW097147390A
Other languages
English (en)
Other versions
TW200937341A (en
Inventor
Stuart Oberman
Ming Siu
David Tannenbaum
Original Assignee
Nvidia Corp
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 Nvidia Corp filed Critical Nvidia Corp
Publication of TW200937341A publication Critical patent/TW200937341A/zh
Application granted granted Critical
Publication of TWI402766B publication Critical patent/TWI402766B/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Multimedia (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Human Computer Interaction (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Complex Calculations (AREA)

Description

繪圖處理器
本發明大體上係關於一種繪圖處理器,且更特別地係,關於一繪圖處理器的倍精確度融合乘加功能單元。
繪圖處理器普遍使用在電腦系統,以加速從二維或三維幾何資料提供影像。這類處理器典型具有高度平行與高度傳送量的設計,允許數千個基本圖元可平行處理,以即時提供複雜的實際動畫影像。高階繪圖處理器提供比典型中央處理單元(CPU,“Central Processing Unit”)更強的計算能力。
最近,已有興趣於有效利用繪圖處理器的能力以加速與影像顯示無關的各種計算。「一般目的」的繪圖處理器可用來執行科學、財務、商業及其他領域的計算。
調適用於一般目的計算的繪圖處理器之一困難度在於繪圖處理器通常設計用於相當低的數值精確度。高品質影像可使用32位元(單精確度)或甚至16位元(半精確度)浮點數值顯示,且功能單元及內部管線可組態成支援這些資料寬度。對照下,許多一般目的計算需要更高的數值精確度,例如64位元(倍精確度)。
為了要支援較高的精確度,一些繪圖處理器使用軟體技術,以一序列機器指令與32位元或16位元功能單元,執行倍精確度計算。此方式會減慢傳送量;例如,可能需要一百或更多的機器指令完成單一64位元乘法運算。此長序列顯著減少繪圖處理器的倍精確度傳送量。在一代表性的情況中,一般估計該繪圖處理器將能夠以大約一高階雙核心CPU晶片可能傳送量的1/5完成倍精確度計算。(相較下,相同繪圖處理器能夠以大約雙核心CPU傳送量的15-20倍完成單精確度計算。)因為以軟體為主之解決方案係遠較慢,所以現行的繪圖處理器很少用於倍精確度計算。
另一解決方案只是使繪圖處理器的所有算術電路足夠處理倍精確度運算元。相較於單一速度傳送量,此將會增加繪圖處理器的倍精確度運算之傳送量。然而,繪圖處理器典型具相當多的每一算術電路的副本以支援平行運算,且增加每一此電路的尺寸將會實質增加晶片面積、成本與功率消耗。
仍然另一解決方案(如在2006年2月21日申請的共同擁有、共同美國申請專利案第11/359,353號)係有效利用單精確度算術電路以執行倍精確度運算。在此方式中,單精確度功能單元中包括的特殊硬體是用來反覆地執行一倍精確度運算。此方式認為較快於以軟體為主之解決方案(可減少傳送量,例如藉由相對於單精確度傳送量的4因數,而不係藉由100的因數),但是此明顯使晶片設計複雜化。此外,若太多指令需要相同功能單元,單精確度與倍精確度運算之間共用相同功能單元將使此功能單元在管線中造成瓶頸。
本發明的具體實施例是在一繪圖處理器中直接支援倍精確度算術。除了單精確度功能單元用於繪圖之外,提供一多用途倍精確度功能單元。倍精確度功能單元可執行許多不同運算,包括在使用資料路徑的倍精確度輸入上的融合乘加、及/或至少倍精確度寬度的邏輯電路。一共用指令發送電路可控制倍精確度與單精確度功能單元,且一核心中包括的倍精確度功能單元的副本數目可少於單精確度功能單元的副本數目,藉此減少增加對晶片區域的倍精確度支援之效果。
根據本發明之一態樣,一繪圖處理器具有一繪圖管線,其可調適產生影像資料。在單精確度運算元上操作的繪圖管線包括一處理核心,其可調適執行許多同時發生的執行緒。該處理核心包括一多用途倍精確度功能單元,其可調適選擇性執行一組倍精確度輸入運算元之許多倍精確度運算之一。多用途倍精確度功能單元包括至少一算術邏輯電路,且倍精確度功能單元的所有算術邏輯電路可充分廣泛以倍精確度運算。在一些具體實施例中,倍精確度功能單元可適應,使得每一倍精確度運算可完成相同數目的時脈週期,而且該單元亦可調適,使得完成任一倍精確度運算所需的時間(例如,時脈週期數目)不會受到下限溢位或上限溢位條件的影響。
倍精確度運算的各種運算與組合可被支援。在一具體實施例中,倍精確度運算包括:一加算,其可將兩個倍精確度運算元相加;一乘算,其可將兩個倍精確度運算元相乘;及一融合乘加運算,其係先計算一第一倍精確度運算元與一第二倍精確度運算元的乘積,然後將一第三倍精確度運算元與該乘積進行加算。支援的其他倍精確度運算包括:一倍精確度比較(DSET)操作,其可執行一第一運算元與一第二運算元之比較測試,及產生一布林(Boolean)結果以指示是否滿足該比較測試;一倍精確度最大(DMAX,“Double-precision Maximum”)運算,其可傳回兩個倍精確度輸入運算元之較大一者;或一倍精確度最小(DMIN,“Double-precision Minimum”)運算,其可傳回兩個倍精確度輸入運算元之較小一者。此外,亦支援將一運算元從一倍精確度格式轉換成一非倍精確度格式(或相反的轉換)之格式化轉換運算。
根據本發明之另一態樣,一繪圖處理器包括一繪圖管線,其調適成產生影像資料。繪圖管線包括一處理核心,其調適成執行多個同時發生的執行緒。處理核心包括單精確度功能單元,其調適成在一或多個單精確度運算元上執行一算術運算;及一倍精確度融合乘加(DFMA,“Double-precision Fused Multiply add”)功能單元,其調適成在一組倍精確度輸入運算元上執行一融合乘加法運算,並提供一倍精確度結果。DFMA功能單元可有利地包括一DFMA管線,該管線具有足夠資料路徑寬度透過DFMA管線,在單一通過中執行融合乘加法運算。例如,該DFMA功能單元可包括一乘法器,其調適成在單循環中,計算兩個倍精確度尾數的乘積;及一加法器,其調適成在單循環中,計算兩個倍精確度尾數的加總。
DFMA功能單元亦可組態成執行其他運算。例如,在一些具體實施例中,該DFMA組態成執行一對倍精確度輸入運算元的乘法運算,並提供一倍精確度結果。在一些具體實施例中,乘法運算與融合乘加法運算是每一者在相同時脈週期數內完成。同樣地,DFMA功能單元可組態成執行一對倍精確度輸入運算元的加法運算,並提供一倍精確度結果。在一具體實施例中,加法運算與融合乘加法運算是每一者在相同時脈週期數目內完成。
在一些具體實施例中,處理核心包括第一功能單元的副本數目(P ),該第一功能單元係調適成平行操作;及DFMA功能單元的副本數目(N ),該數目P 係大於該數目N 。在一具體實施例中,此數目N 是1。
處理核心可包括一輸入管理器電路,其係調適成在不同(例如,連續)時脈週期上,收集有關DFMA功能單元的P 組倍精確度輸入運算元,及將該等P 組倍精確度運算元之不相同者傳遞至DFMA功能單元。輸入管理器電路亦可調適成收集第一功能單元的P 組單精確度輸入運算元,及同時將該等P 組單精確運算元之不相同者傳遞至該第一功能單元的P 副本之每一者。
下列連同附圖的詳細描述將提供對本本發明的本質與優點的更佳瞭解。
本發明的具體實施例提供繪圖處理器,其包括專屬的倍精確度(例如,64位元)功能單元。在一具體實施例中,一倍精確度功能單元可執行加算、乘算、及融合乘加運算、以及倍精確度比較與針對倍精確度格式的格式轉換。
I.系統概觀
A.電腦系統概觀
第一圖為根據本發明之一具體實施例的一電腦系統100之區塊圖。該電腦系統100包括一中央處理單元(CPU,“Central Processing Unit”)102與一系統記憶體104,彼此係經由一匯流排路徑進行通訊,該路徑包括一記憶體橋接105。記憶體橋接105(可為例如一習知北橋(Northbridge)晶片)是經由一匯流排或其他通訊路徑106(例如,一HyperTransport鏈路)連接至一輸入/輸出(Input/Output,I/O)橋接107。I/O橋接107(可為例如一習知南橋(Southbridge)晶片)係從一或多個使用者輸入裝置108(例如,鍵盤、滑鼠)接收使用者輸入,並經由匯流排106與記憶體橋接105將輸入轉送至CPU 102。視景輸出是在一像素式顯示裝置110(例如,一習知CRT式或LCD式之監視器)上提供,其操作是在經由一匯流排或其他通訊路徑113,在耦合至記憶體橋接105的一繪圖子系統112控制下操作,例如一PCI Express(PCI-E)或加速繪圖埠(AGP,“Accelerated Graphics Port”)鏈路。一系統磁碟114亦連接至I/O橋接107。一開關116提供在I/O橋接107與其他組件(例如一網路轉接器118和各種附加介面卡120、121)之間的連接。其他組件(未在圖明確顯示)(包括USB或其他連接埠連接、CD光碟機、DVD光碟器等)亦可連接至I/O橋接107。在各種組件之中的匯流排連接可使用匯流排協定實施,例如周邊組件互連(PCI,“Peripheral Component Interconnect”)、PCI-E、AGP、HyperTransport或任何其他匯流排或點對點通訊協定,且不同裝置之間的連接可使用在技術中熟知的不同協定。
繪圖處理子系統112包括一繪圖處理單元(GPU,“Graphics Processing Unit”)122與一繪圖記憶體124,其可例如使用一或多個積體電路裝置加以實施,例如可程式處理器、特殊應用積體電路(ASIC,“Application Specific Integrated Circuit”)與記憶體裝置。GPU 122可組態成執行各種工作,以進行經由記憶體橋接105和匯流排113,藉由CPU 102及/或系統記憶體104供應的繪圖資料產生像素資料;與繪圖記憶體124進行互動,以儲存及更新像素資料等相關工作。例如,GPU 122可從由CPU 102執行的各種程式提供的2D或3D場景資料產生像素資料。GPU 122亦可將經由記憶體橋接105接收的像素資料儲存至繪圖記憶體124,以供進行或無需進一步處理。GPU 122亦包括一掃出模組,其組態成將像素資料從繪圖記憶體124傳遞至顯示裝置110。
GPU 122亦組態成執行資料處理工作的一般目的計算,包括有關繪圖應用(例如,電視遊樂器等的物理模型)的工作、以及無關繪圖應用的工作。對於一般目的計算而言,GPU 122有利地從系統記憶體104或繪圖記憶體124讀入資料,執行一或多個程式以處理資料,及將輸出資料寫回至系統記憶體104或繪圖記憶體124。除了在繪圖操作期間使用的其他單精確度功能單元之外,GPU 122可有利地包括用於一般目的計算的一或多個倍精確度融合乘加單元(未在第一圖顯示)。
CPU 102的操作如同系統100的主處理器,用於控制及協調其他系統組件的操作。特別地係,CPU 102係送出控制GPU 122操作的命令。在一些具體實施例中,CPU 102將GPU 122的命令流寫至一命令緩衝器,該緩衝器可在系統記憶體104、繪圖記憶體124、或可由CPU 102和GPU 122二者存取的另一儲存位置。GPU 122是從命令緩衝器讀取命令流,並與CPU 102的操作非同步地執行命令。命令亦可包括習知繪圖命令,其用於產生影像;以及一般目的計算命令,其允許CPU 102執行應用程式,以有效利用GPU 122的計算能力,作為可能無關影像產生的資料處理。
應該明白,在此顯示的系統只是說明,且不同的變化與修改是可能的。匯流排拓撲(Bus Topology)(包括橋接的數目與配置)可視需要予以修改。例如,在一些具體實施例中,系統記憶體104係直接連接至CPU 102而不是透過一橋接,且其他裝置可經由記憶體橋接105和CPU 102而與系統記憶體104進行通訊。在其他替代拓撲中,繪圖子系統112連接至I/O橋接107而不是連接至記憶體橋接105。在仍然其他具體實施例中,I/O橋接107與記憶體橋接105可整合在單晶片內。在此顯示的特定組件是選擇性;例如,可支援任何數量的附加介面卡或周邊裝置。在一些具體實施例中,可免除開關116,且網路轉接器118與附加介面卡120、121係直接連接至I/O橋接107。
GPU 122連接至系統100的其餘部分亦會改變。在一些具體實施例中,繪圖系統112實施作為一附加介面卡,其可插入系統100的一擴充槽。在其他具體實施例中,一GPU是在單晶片上與一匯流排橋接整合,該匯流排橋接例如有記憶體橋接105或I/O橋接107。在仍然其他具體實施例中,GPU 122的一些或所有元件可與CPU 102一起整合。
一GPU可具有任何數量的本機繪圖記憶體,包括沒有本機記憶體,並可以任何組合方式使用本機記憶體與系統記憶體。例如,在統一記憶體架構(UMA,“Unified Memory Architecture”)具體實施例中,沒有提供專屬的繪圖記憶體裝置,且GPU專門或幾乎專門使用系統記憶體。在UMA具體實施例中,GPU可整合在一匯流排橋接晶片或提供作為一分立晶片,具有一高速匯流排(例如,PCI-E),該匯流排連接GPU至橋接晶片與系統記憶體。
亦應該瞭解,任何數量的GPU可包括在一系統,例如,藉由在單一繪圖介面卡上包括多個GPU、或藉由連接多個繪圖介面卡至匯流排113。多個GPU可平行操作,以產生可供相同顯示裝置或不同顯示裝置的影像,或一GPU可操作產生影像,而另一GPU可執行一般目的計算,包括如下述的倍精確度計算。
此外,具體實施本發明之態樣的GPU可合併在各種裝置,包括一般用途電腦系統、電視遊樂器控制台及其他特殊目的電腦系統、DVD播放器、手持式裝置,例如行動電話或個人數位助理等。
B.繪圖管線概觀
第二圖為根據本發明之一具體實施例之可在第一圖的GPU 122中實施的一繪圖管線200之區塊圖。在此具體實施例中,繪圖管線200係使用一架構實施,其中使用相同平行處理硬體(在此稱為「多執行緒核心陣列(Multithreaded Core Array)」202)執行任何適用的繪圖相關程式(例如,頂點著色器(Vertex Shader)、幾何著色器(Geometry Shader)及/或像素著色器(Pixel Shader)),與一般目的計算程式。
除了多執行緒核心陣列202之外,繪圖管線200包括一前端204與資料組合器206、一設定模組208、光柵化器210、一彩色組合模組212、與一光柵操作模組(ROP,“Raster Operations Module”)214,其每一者可使用習知的積體電路技術或其他技術實施。
針對繪圖操作,前端204係例如從第一圖的CPU 102接收狀態資訊(STATE)、命令(CMD)、與幾何資料(GDATA)。在一些具體實施例中,而不是直接提供幾何資料,CPU 102提供幾何資料儲存的系統記憶體104之位置參考;資料組合器206是從系統記憶體104取回資料。針對繪圖操作,狀態資訊、命令與幾何資料可為通常一習知本質,並可用來定義想要的描繪影像或一些影像,包括場景的幾何、照明、暗影、結構、動作、及/或照像機參數。
狀態資訊與繪圖命令係定義繪圖管線200的不同階段之處理參數與動作。前端204係將狀態資訊與繪圖命令經由一控制路徑(未在圖明確顯示)導向繪圖管線200的其他組件。如在技術中所熟知的,這些組件可藉由儲存或更新於處理期間存取在各種控制暫存器中的值,以回應接收的狀態資訊,並可藉由處理在管線中接收的資料,以回應繪圖命令。
前端204係將幾何資料導向資料組合器206。資料組合器206格式化幾何資料,並準備將此幾何資料傳遞至在多執行緒核心陣列202中的一幾何模組218。
幾何模組218使用回應前端204提供的狀態資訊所選取的程式,以導引多執行緒核心陣列202中的可程式處理引擎(未在圖明確顯示)在頂點資料上執行頂點及/或幾何著色器程式。頂點及/或幾何著色器程式可藉由如在技術中熟知的繪圖應用程式予以指定,且不同著色器程式可應用至不同頂點及/或基本圖元。在一些具體實施例,頂點著色器程式與幾何著色器程式係使用多執行緒核心陣列202中的相同可程式處理核心執行。因此,在特定時間,一給定的處理核心可操作為一頂點著色器,負責接收及執行頂點程式指令,且在其他時間,相同處理核心可操作為一幾何著色器,負責接收及執行幾何程式指令。處理核心可為多執行緒,且執行不同類型著色器程式的不同執行緒可在多執行緒核心陣列202中同時執行。
在頂點及/或幾何著色器程式執行之後,幾何模組218可將處理過的幾何資料(GDATA’)傳遞至設定模組208。通常為習知設計的設定模組208可從每一基本圖元的裁剪空間或螢幕空間坐標產生幹邊方程;該等幹邊方程可有利地用來決定螢幕空間的一點是在基本圖元的內部或外部。
設定模組208提供每一基本圖元(PRIM)至光柵化器210。通常為習知設計的光柵化器210可例如使用習知的掃描轉換演算法,決定基本圖元涵蓋哪些(如果有的話)像素。在此的使用,一「像素」(或「圖點(Fragment)」)通常是指將決定單色值的2D螢幕空間的區域;像素的數目與配置可為繪圖管線200的可組態參數,並可與一特定顯示裝置的螢幕解析度有關或無關。
在決定一基本圖元涵蓋哪些像素之後,光柵化器210將基本圖元(PRIM)、連同基本圖元所涵蓋像素的一連串螢幕坐標(X,Y)提供給一彩色組合模組212。彩色組合模組212係使從光柵化器210接收的基本圖元和涵蓋資訊與基本圖元的頂點屬性(例如,彩色組件、結構坐標、表面正常)有關聯性,並產生平面方程式(或其他適當方程式),以將一些或全部屬性定義為螢幕坐標空間的位置函數。
這些屬性方程式可有利地使用在像素著色器程式中,以計算基本圖元中任何位置的屬性值;習知的技術可用來產生方程式。例如,在一具體實施例中,彩色組合模組212可對每一屬性U ,產生式子U =Ax +By +C 平面方程式的係數A、B 、和C
彩色組合模組212係將每一基本圖元之屬性方程式(EQS,其可包括例如平面方程式係數A、BC )提供給多執行緒核心陣列202中的一像素模組224,該基本圖元涵蓋一像素的至少一取樣位置、及涵蓋像素的一連串螢幕坐標(X,Y)。像素模組224係導引多執行緒核心陣列202中的可程式處理引擎(未在圖明確顯示)在基本圖元所涵蓋的每一像素上執行一或多個像素著色器程式,且程式係回應前端204提供的狀態資訊而選取。正如頂點著色器程式與幾何著色器程式,繪圖應用程式可指定用於任何給定組像素的像素著色器程式。
像素著色器程式可使用相同可程式的處理引擎在多執行緒核心陣列202中有利地執行,其亦可執行頂點及/或幾何著色器程式。因此,在特定時間,一給定的處理引擎可操作為一頂點著色器,負責接收及執行頂點程式指令;在其他時間,相同處理引擎可操作為一幾何著色器,負責接收及執行幾何程式指令;且在仍然其他時間,相同處理引擎可操作為一像素著色器,負責接收及執行像素著色器程式指令。
一旦完成一像素或一群像素的處理,像素模組224提供處理的像素(PDATA)至ROP 214。通常可為習知設計的ROP 214係整合從像素模組224接收的像素值與訊框緩衝器226中建構的影像像素,該訊框緩衝器可例如位在繪圖記憶體124。在一些具體實施例中,ROP 214可遮罩像素,或將新的像素與先前寫至繪圖影像的像素予以混合。深度緩衝器、ALPHA緩衝器與模板緩衝器亦可用來決定每一進入像素對繪圖影像的貢獻(如果有的話)。對應至每一進入像素值與任何先前儲存像素值的適當組合之像素資料PDATA'係寫回至訊框緩衝器226。一旦完成影像,訊框緩衝器226可掃瞄至一顯示裝置及/或做進一步處理。
對於一般目的計算而言,像素模組224(或藉由幾何模組218)可控制多執行緒核心陣列。前端204係例如從第一圖的CPU 102接收狀態資訊(STATE)與處理命令(CMD),並經由一控制路徑(未在圖明確顯示)傳遞至一工作分配單元,該工作分配單元可合併例如在彩色組合模組212或像素模組224。該工作分配單元可在構成多執行緒核心陣列202的處理核心之中分配處理工作。可使用各種工作分配演算法。
每一處理工作可有利地包括執行許多執行緒,其中每一執行緒係執行相同程式。程式可有利地包括一些指令,以從「全域記憶體(例如系統記憶體104、繪圖記憶體124、或GPU 122和CPU 102二者可存取的任何其他記憶體)」讀取輸入資料;執行各種運算,包括輸入資料進行至少一些倍精確度運算,以產生輸出資料;及將輸出資料寫至全域記憶體。特定處理工作對本發明不是具決定性。
應該明白,在此描述的繪圖管線只是說明,且各種變化與修改是可能的。管線可包括不同於顯示的一些單元,且處理事件的順序可與在此描述不同。此外,在此描述的一些或全部模組的多個實例可平行操作。在一此具體實施例中,多執行緒核心陣列202包括可平行操作的兩或多個幾何模組218、與相等數目的像素模組224。每一幾何模組與像素模組係共同控制多執行緒核心陣列202中的不同處理引擎子集。
C.核心概觀
多執行緒核心陣列202可有利地包括一或多個處理核心,該等處理核心適合平行執行大量處理執行緒,其中術語「執行緒」是指在一特定輸入資料集上執行的一特定程式之實例。例如,一執行緒可為下列程式的一實例:執行在單頂點屬性的一頂點著色器程式、執行在一給定基本圖元與像素的一像素著色器程式、或一般目的計算程式。
第三圖為根據本發明之一具體實施例的一執行核心300之區塊圖。可例如在上述多執行緒核心陣列202中實施的執行核心300係組態成執行任意序列的指令,用以執行各種計算。在一些具體實施例中,相同執行核心300在所有繪圖著色階段可用來執行著色器程式,包括頂點著色器、幾何著色器、及/或像素著色器程式、以及一般目的計算程式。
執行核心300包括一拾取與分發單元302、一發送單元304、一倍精確度融合乘加(DFMA,“Double-Precision Fused Multiply-Add”)單元320、其他功能單元(FU,“Functional Unit”)322的數目(N)、與一暫存器檔案324。每一功能單元320、322組態成執行指定的運算。在一具體實施例中,除了如下述的其他倍精確度運算之外,DFMA單元320可有利地實施一倍精確度融合乘加運算。應該瞭解,任何數目的DFMA單元320可包在一核心300中。
其他功能單元322可為通常習知的設計,並可支援多種運算,例如單精確度加算、乘算、位元邏輯(Bitwise Logic)運算、比較運算、格式轉換操作、結構篩選、記憶體存取(例如,載入及儲存操作)、超越函數的近似、插值法等。功能單元320、322可經管線處理,以允許在結束一先前指令之前,發送一新指令,如技術中已熟知者。可提供功能單元的任何組合。
在執行核心300的運算時,拾取與分發單元302係從一指令儲存裝置(未在圖顯示)獲得指令,將該等指令解碼,及將解碼指令(當作與運算元參考或運算元資料有關的運算碼)分發至發送單元304。對於每一指令而言,發送單元304可例如從暫存器檔案324獲得任何參考的運算元。當一指令的所有運算元準備好時,發送單元304可藉由傳送運算碼與運算元,將指令發送至DFMA單元320或另一功能單元322。發送單元304係有利地使用運算碼以選擇適當的功能單元執行一給定的指令。拾取與分發單元302與發送單元304可使用習知的微處理器架構與技術加以實施,並將省略詳細描述,不致對本發明之瞭解造成失焦。
DFMA單元320及其他功能單元322係接收運算碼與相關的運算元,並執行運算元的指定運算。結果資料是以結果值的形式加以提供,該結果值可經由一資料傳輸路徑326轉送至暫存器檔案324(或另一目的地)。在一些具體實施例中,暫存器檔案324包括一本機暫存器檔案,具有配置給特定執行緒的區段;以及一全域暫存器檔案,此允許資料在不同執行緒之間共用。在程式執行期間,暫存器檔案324可用來儲存輸入資料、中間結果等。暫存器檔案324的一特定實施對本發明不是具決定性的。
在一具體實施例中,核心300是多執行緒,並可例如藉由維持與每一執行緒有關的目前狀態資訊,同時執行多達最大數目執行緒(例如,384、768)。核心300係有利地設計成可在不同執行緒之間快速切換,以便,例如,來自一頂點執行緒的一程式指令可在一時脈週期上發送,且該指令之後係來自一不同頂點執行緒或一不同類型執行緒(例如一幾何執行緒或一像素執行緒等)的一程式指令。
應該明白,第三圖的執行核心只是說明,且不同的變化與修改是可能的。任何數目核心可包括在一處理器中,且任何數目的功能單元可包括在一核心中。拾取與分發單元302與發送單元304可實施任何想要的微架構,可視需要包括具順序或無順序指令發送、預測執行模式、單指令多資料(SIMD,“Single-Instruction,Multiple Data”)等的純量、超純量或向量架構。在一些結構中,發送單元可接收及/或發送一長指令字,包括用於多功能單元的運算碼與運算元、或用於一功能單元的運算碼及/或運算元。在一些結構中,執行核心包括可平行操作的每一功能單元的多個實例,例如,用於執行SIMD指令。執行核心亦可包括一序列的管線功能單元,其中來自一管線級中功能單元的結果係轉送至在稍後管線級中的功能單元,而不是直接至一暫存器檔案;此組態中的功能單元可藉由單一長指令字或個別指令來控制。
此外,閱讀此說明的熟諳此項技術人士應該明白,DFMA單元320能夠使用任何微處理器如同一功能單元加以實施,並未限於繪圖處理器或任何特定處理器或執行核心結構。例如,DFMA單元320可在一般目的平行處理單元或一CPU中實施。
C.DFMA單元概觀
根據本發明之一具體實施例,執行核心300包括一可執行三類型運算的DFMA單元320:倍精確度算術運算、比較運算、及在倍精確度與其他格式之間的格式轉換。
DFMA單元320可有利地使用其他浮點與固定點格式以處理倍精確度浮點格式的輸入與輸出,供轉換運算;用於不同運算的運算元可為不同格式。在描述DFMA單元320的一具體實施例之前,將定義一些代表性格式。
如在此使用的「fp32」是指標準IEEE 754單精確度浮點格式,其中一正常浮點數字是以一符號位元、八個指數位元、與23個有效數字位元表示。指數是以127向上偏移,以便範圍2-126 至2127 中的指數可使用從1至254的整數表示。對於「正常」數字而言,23個有效數字位元係解釋為隱含1作為整數部分的24位元尾數之分數部分。(在此使用術語「有效數字」是指當隱含前導1時,而「尾數」是用來表示(若適用)前導1已明確宣告)。
如在此使用的「fp64」是指標準IEEE 754倍精確度浮點格式,其中一正常浮點數字是以符號位元、11個指數位元與52個有效數字位元表示。指數是以1023向上偏移,以便在範圍2-1022 至21023 中的指數可使用從1至2046的整數表示。對於「正常」數字而言,52個有效數字位元係解釋為隱含1作為整數部分的53位元尾數之分數部分。
如在此使用的「fp16」是稱為普遍使用在繪圖的「半精確度」浮點格式,其中一正常浮點數字係藉由一符號位元表示,5個指數位元與10個有效數字位元。指數是向上偏移15,以便在範圍2-14 至215 中的指數可使用從1至30的整數來表示。對於「正常」數字而言,10個有效數字位元係解釋為隱含1作為整數部分的11位元尾數之分數部分。
在fp16、fp32和fp64格式中,指數位元中全是零的數字是稱為反向規格化數字(或簡稱「反向規格化」),並解釋為在尾數中不含有前導1;此數字可代表例如計算中的下限溢位。指數位元中的全是1的(正或負)數字、及有效數字中的零是稱為(正或負)INF;此數字可代表例如計算中的上限溢位。指數位元中全是1的數字與有效數字位元中的一非零數字是稱為非數字(NaN,“Not a Number”),並可用來例如代表未定義的數值。零亦認為一特別數字,並可藉由設定成零的所有指數與有效數字位元表示。零可帶有任一符號;如此,允許使用正與負零二者。
固定點格式在此係藉由起始「s」或「u」指定,表示格式是否為有符號或無符號,且一數字係表示總位元數目(例如,16、32、64);因此,s32是指符號32位元格式,u64是指一無符號64位元格式等。對於有符號格式而言,可有利地使用2的補數表示法。在此使用的所有格式中,最高有效位元(Most Significant Bit,MSB)是在位元欄位的左邊,且最低有效位元(Least Significant Bit,LSB)是在欄位的右邊。
應可瞭解,在此定義及參考的這些格式只是為說明目的,且一DFMA單元可支援這些格式或不同格式的任何組合,不致脫離本發明的範疇。特別地係,應可瞭解,「單精確度」和「倍精確度」是指任何兩不同浮點格式,未限於現階段定義的標準;一個倍精確度格式(例如,fp64)是指使用比一相關單精確度格式(例如,fp32)更多位元數目的任何格式,以代表較大範圍的浮點數字、及/或代表較高精確度的浮點數值。同樣地,「半精確度」通常是指使用比一相關單精確度格式更少位元之一格式,以代表較小範圍的浮點數字、及/或代表具較低精確度的浮點數字。
根據本發明的DFMA單元320之一具體實施例現將描述。第四圖為列出藉由DFMA單元320的此具體實施例執行倍精確算術、比較運算與格式轉換運算的表400。
區段402列出算術運算。加算(DADD)是加算兩fp64輸入A和C,並傳回fp64加總A+C。乘算(DMUL)是乘算兩fp64輸入A和B,並傳回fp64乘積A*B。融合乘加(DFMA)係接收三個fp64輸入A、B和C,並計算A*B+C。運算是「融合」在於A*B的結果加至C之前,乘積A*B並未被捨入;使用精確值A*B改善準確度,並遵從即將來臨關於浮點算術運算的IEEE 754R標準。
區段404列出比較運算。一最大運算(DMAX)係傳回fp64運算元A和B之較大一者,且一最小運算(DMIN)傳回兩者之較小一者。二位元測試運算(DSET)係執行倍精確度運算元A和B的許多二位元關係測試之一者,並傳回一布林值以指出是否滿足該測試。在此具體實施例中,可測試的二位元關係包括大於(A>B)、小於(A<B)、等於(A=B)、及無序(A?B,若A或B是NaN,則此關係式為真)、以及逆反性(例如,A≠B)、及各種組合測試(例如、A<>B、A?=B等)。
區段406係列出格式轉換與捨入運算。在此具體實施例中,DFMA單元320可將fp64格式數字轉換成其他64位元或32位元格式的數字,反之亦然。D2F運算將運算元A從fp64轉換成fp32,F2D運算將運算元A從fp32轉換成fp64。D2I運算將運算元A從fp64轉換成s64、u64、s32和u32格式之任一者;應可瞭解,確定的運算碼可用來識別目標格式。I2D運算將整數運算元C從任一s64、u64、s32和u32格式轉換成fp64格式;再次,應可瞭解,確定的運算碼可用來識別來源格式。在此具體實施例中,DFMA單元320可支援來回於倍精確度格式之所有轉換;其他功能單元可執行其他格式轉換(例如,在fp32和fp16之間;在fp32和整數格式之間等)。
D2D運算是用來將捨入運算(例如IEEE捨入模式)應用至一fp64運算元。這些運算是將fp64運算元捨入至以fp64格式表示的一整數值。在一具體實施例中,支援的D2D運算包括截掉(捨入至零)、捨入至正+INF(ceil)、捨入至負-INF(floor)、與最近數值(向上或向下捨入至最近整數)。
在此具體實施例中,DFMA單元320不提供更進階算術函數的直接硬體支援,例如除算、餘數或平方根。然而,DFMA單元320可用來加速這些運算的以軟體為主之實施。例如,除算的一通用方法係估算一商數q=a/b,然後使用t=q*b-a以測試該估算。若t是零,商數q已正確決定。若撤銷,則大小t是用來修改估算的商數q,並重複測試直到t變成零。可使用單一DFMA運算(使用A=q,B=b,C=-a)正確計算每一反復的測試結果t。同樣地,對於平方根而言,一通用方法係估算i=a1/2 ,然後計算t=r*r-a以測試該估算,且若t不是零,則修改r。再次,可使用單一DFMA運算(使用A=B=r,C=-a)正確計算每一反復的測試結果t。
第2和3節係描述可執行在第四圖中顯示所有操作的DFMA單元320。第2節係描述DFMA單元320的一電路結構,且第3節係描述電路結構如何用來執行在第四圖中列出的操作。應該瞭解,在此描述的DFMA單元320只是說明,並可使用電路區塊的適當組合以支援其他或不同的功能組合。
2.DFMA單元結構
第五圖為根據本發明之一具體實施例的DFMA單元320之簡化區塊圖,其支援在第四圖中顯示的所有操作。在此具體實施例中,DFMA單元320係實施用於所有操作的一多級管線。在每一處理器週期上,DFMA單元320可經由運算元輸入路徑502、504、506接收(例如,從第三圖的發送單元304)三個新運算元(A0 、B0 、C0 );及一運算碼,指出是否經由運算碼路徑508執行運算。在此具體實施例中,運算可為第四圖中顯示的任何運算。除了運算之外,運算碼可有利地指示運算元的輸入格式、以及結果使用的輸出格式,此可與或不與輸入格式相同。應該注意,第四圖顯示的運算可具有與此運算有關的多個運算碼;例如,對於具s64輸出的D2I運算而言,可為一運算碼,且對於具s32輸出的D2I運算而言,可為一不同的運算碼等。
DFMA單元320係透過其所有管線級以處理每一運算,並在信號路徑510上產生一64位元(或對於特定格式轉換運算為32位元)結果值(OUT),及在信號路徑512上產生一對應的條件碼(COND)。這些信號可傳遞例如至如第三圖所示的暫存器檔案324、發送裝置304、或一處理器核心的其他元件,此係取決於所使用的架構。在一具體實施例中,一管線級係對應至一處理器週期;在其他具體實施例中,一管線級可包括多個處理器週期。此外,管線中的不同路徑可有利地平行操作。
第2.A節係提供DFMA管線的概觀,且第2.B-1節係詳細描述每一區段的電路區塊。
A. DFMA管線
管線的最初瞭解係關於如何在DFMA運算期間使用電路區塊。運算元準備區塊514係執行運算元格式化(用於不是fp64格式的運算元)與特別數字偵測;運算元準備區塊514亦從輸入fp64運算元擷取尾數(Am、Bm、Cm)、指數(Ae、Be、Ce)與符號位元(As、Bs、Cs)。在一具體實施例中,沒有不合法的運算元組合;可只忽略未使用在一特定運算的任何運算元。
尾數路徑516係計算尾數Am和Bm的乘積。同時,指數路徑518係使用指數Ae和Be決定在乘積A*B與運算元C之間的相對對準,並將運算元C(C_align)的一對齊尾數供應給尾數路徑516。尾數路徑516將C_align加至乘積Am*Bm,然後將該結果予以正規化。基於該正規化,尾數路徑516將一對準信號(ALIGN_NORM)提供回給指數路徑518,其使用ALIGN_NORM信號連同指數Ae、Be和Ce決定最後結果的指數。
符號路徑520係接收來自運算元準備區塊514的符號位元As、Bs和Cs,並決定結果的符號。尾數路徑516係偵測結果為零的情況,並將零結果(R_ZERO)發信通知給符號路徑520。
輸出區段522係接收來自尾數路徑516的一結果尾數Rm、來自指數路徑518的一結果指數Re、及來自符號路徑520的一結果符號Rs。輸出區段522亦接收來自運算元準備區塊514的特別數字信號(SPC)。基於此資訊,輸出區段522係格式化最後結果(OUT),以傳遞至輸出路徑510,並在輸出路徑512產生一條件碼(COND)。有利地包括少於結果位元的條件碼係運送關於結果本質的一般資訊。例如,條件碼可包括位元,指出結果是否為正、負、零、NaN、INF、反向規格化等。如技術中已知者,在一條件碼具有一結果的情況中,該結果的隨後使用者有時可使用條件碼,而不是在其處理中的結果本身。在一些具體實施例中,條件碼可用來指示運算執行期間發生的一異常或其他事件。在其他具體實施例中,條件碼可完全省略。
應該瞭解,雖然例如「尾數路徑」和「指數路徑」的名稱可建議係在特定運算(例如,DFMA)期間,藉由每一路徑的各種電路區塊執行的功能,但是電路區塊連同任何內部資料路徑能夠以一運算相關的方式而於多種使用予以有效利用。範例是在下面描述。
除了資料路徑之外,DFMA單元320亦提供如第五圖的一控制區塊530所表示之一控制路徑。控制區段530係接收運算碼,並產生各種運算碼有關的控制信號,通常在此是以「OPCTL」表示,其可與透過管線的資料傳遞同步而傳遞至每一電路區塊。(連接OPCTL信號至各種電路區塊未在第五圖顯示。)如下述,OPCTL信號係回應運算碼以啟用、停用、或控制DFMA單元320的各種電路區塊操作,以便可使用相同管線元件執行不同運算。在此所示的各種OPCTL信號可包括運算碼本身或從運算碼取得的一些其他信號,例如藉由在控制區塊530中實施的組合邏輯。在一些具體實施例中,在數個管線級中,可使用多個電路區塊實施控制區塊530。應該瞭解,一給定操作期間,提供給不同區塊的OPCTL信號可為相同信號或不同信號。鑒於本發明,熟諳此項技術人士將可建構適當的OPCTL信號。
應該注意,一給定電路級之電路區塊可能需要不同量的處理時間,且在一特定電路級所需的時間可能隨著不同操作而變化。因此,DFMA單元320亦可包括各種時序與同步電路(未在第五圖顯示),以控制不同管線級的不同路徑上傳遞資料。可使用任何適當時序電路(例如,閂鎖、傳輸閘等)。
A.運算元準備
第六圖為根據本發明之一具體實施例的運算元準備區塊514之區塊圖。運算元準備區塊514係接收輸入運算元A、B和C,並提供尾數部分(Am、Bm、Cm)至尾數路徑516,提供指數部分(Ae、Be、Ce)至指數路徑518,及提供符號位元(As、Bs、Cs)至符號路徑520。
運算元A、B和C是在個別NaN偵測區塊612、614、616與個別絕對值/負區塊618、620、622接收。每一NaN偵測區塊612、614、616係決定接收的運算元是否為NaN(在指數位元中全是1,且在有效數字位元中是一非零數字),並產生一對應的控制信號。
絕對值/負區塊618、620、622可回應OPCTL信號(未在圖明確顯示)將運算元的符號位元顛倒。例如,第四圖中列出的任一運算可指定是否使用一運算元的負、或一運算元的絕對值。區塊618、620、622可將符號位元顛倒,將一運算元加負號或強迫使符號位元成為非負狀態(真為IEEE 754格式為零)。若一輸入運算元是NaN,適當的絕對值/負區塊618、620、622亦使NaN未明(例如,藉由將有效數字的前導位元設定成1),維持符號位元。絕對值/負區塊618、620、622提供其個別輸出至運算元選擇多工器632、634、636。
對於倍精確算術運算而言,可直接使用絕對值/負區塊618產生的運算元A、B和C。對於比較運算而言,A/B比較電路624係比較運算元A和B。在一具體實施例中,絕對值/負電路620係將運算元B加負號,且A/B比較電路624係計算A和-B的加總,當若A和-B是固定點數字。若結果是正,則A大於B;若結果是負,則A是小於B;若結果是零,則A等於B。A/B比較電路624亦可接收來自NaN偵測電路612和614的NaN資訊(這些路徑未明確在第六圖顯示)。若A或B之任一者(或兩者)是NaN,則A和B是「無順序」。結果資訊係提供給控制邏輯630。控制邏輯630係將結果資訊當作一信號R_TEST提供給輸出區段522,且亦提供控制信號至運算元選擇多工器632、634、636。
對於格式轉換運算元而言,輸入可能不是fp64格式。一fp32擷取電路626在F2D運算期間是使用中。Fp32擷取電路626係接收運算元A,並執行非正常fp32輸入的所有測試。fp32擷取電路626亦將接收的運算元之有效數字欄位從23位元擴充至52位元(例如,藉由增加尾零)。fp32擷取電路626係將8位元fp32指數擴充至11位元,並將指數偏移從127增加至1023(例如,藉由將896加至fp32指數)。
一無符號/有符號(U/S,“Unsigned/Signed”)擷取電路628在I2D運算期間是使用中。U/S擷取電路628係接收任一u32、s32、u64或s64格式的固定點運算元C,並準備將該運算元轉換成fp64。U/S擷取電路628是將固定點運算元從1的補數(或2的補數)形式轉換成符號數值(Sign-Magnitude)形式,並預先考慮或附加零,以對齊有效數字欄位中的運算元。U/S擷取電路628係提供其輸出至運算元選擇多工器636,並亦提供至指數路徑518作為一I2D輸入信號。
運算元選擇多工器632、634、636係回應來自控制邏輯630的信號,以選擇運算元A、B和C。運算元選擇多工器632是在來自絕對值/負電路618的運算元A與常數值0.0和1.0(以fp64格式表示)之間選擇。對於DMUL和DFMA運算而言,可選擇運算元A。對於DMIN(DMAX)運算而言,若A<B(A>B),則選擇運算元A;否則可選擇1.0。對於DADD和I2D運算而言,可選擇0.0。
運算元選擇多工器634是在來自絕對值/負電路620的運算元B與常數值0.0和1.0(以fp64格式表示)之間選擇。對於DMUL和DFMA運算而言,可選擇運算元B。對於DMIN(DMAX)運算而言,若B<A(B>A),可選擇運算元B;否則選擇1.0。對於DADD和I2D運算而言,可選擇0.0。
運算元選擇多工器636是在來自絕對值/負電路622的運算元C、來自fp32擷取電路626的一擷取fp32值、來自U/S擷取電路628的一擷取無符號或有符號整數值、及一常數值0.0(以fp64格式表示)之中選擇。對於DADD和DFMA運算而言,可選擇運算元C。對於DMUL和比較運算而言,可選擇常數0.0。對於F2D運算而言,可選擇來自fp32擷取電路626的擷取fp32值,及對於I2D運算而言,可選擇來自U/S擷取電路628的擷取U/S值。
選擇多工器632、634、636選擇的運算元A、B和C係提供給特別數字偵測電路638、640、642。對於fp64運算元而言,特別數字偵測電路638、640、642係偵測所有特別數字條件,包括反向規格化、NaN、INF和零。對於F2D運算而言,特別數字偵測電路642係經由一路徑644,從fp32擷取電路626接收fp32特別數字資訊。每一特別數字偵測電路638、640、642係產生一特別數字信號(SPC),以指出運算元是否為一特別數字,且若確認,是何種類型。特別數字信號SPC是在信號路徑524上提供給輸出區段522,如第五圖所示。通常習知設計的特別數字偵測邏輯可使用。在一替代具體實施例中,NaN偵測(藉由電路612、614和616執行)不在電路638、640、642中重複;相反地係,每一特別數字偵測電路638、640、642係從NaN偵測電路612、614和616之對應一者接收一NaN信號,並使用該信號決定運算元是否為NaN。
不管是否偵測到任何特別數字,特別數字偵測電路638、640和642將運算元分尾數、指數與符號位元。特別數字偵測電路638提供運算元A(Am)的尾數部分至尾數路徑516(第五圖),提供運算元A(Ae)的指數部分至指數路徑518,及提供符號位元(As)至符號路徑520。特別數字偵測電路640提供運算元B(Bm)的尾數部分至尾數路徑516,提供運算元B(Be)的指數部分至指數路徑518,及提供符號位元(Bs)至符號路徑520。特別數字偵測電路642係提供運算元C的尾數部分(Cm)與指數部分(Ce)至指數路徑518,及提供符號位元(Cs)至符號路徑520。在一些具體實施例中,特別數字偵測電路638、640、642係將前導1附加至尾數Am、Bm、Cm(除了數字是反向規格化之外)。
B.指數路徑
第七圖為根據本發明之一具體實施例的指數路徑518之區塊圖。
一指數計算電路702係從運算元準備區塊514(第五圖)接收指數位元Ae、Be、和Ce,並計算DFMA結果A*B+C的區塊指數。習知的指數計算電路可使用。在一具體實施例中,若所有運算元是正常數字,指數計算電路加算Ae和Be,並減去fp64指數偏移(1023),以決定乘積A*B的指數,然後將乘積指數與指數Ce之較大一者選擇作為DFMA結果的區塊指數(BLE)。此區塊指數BLE係提供給向下資料流最後指數計算電路704。若一或多個運算元是非正規化(如特別數字信號SPC所示),適當的邏輯可用來決定區塊指數BLE。在其他具體實施例中,涉及特別數字的運算之指數決定是在如下述的輸出區段522中處理。
此外,指數計算區塊702係決定運算元C的尾數可有效左移或右移以使Cm與乘積Am*Bm對齊的量。此量是以一Sh_C控制信號提供至一移位電路706。此控制信號係有利地說明Cm的額外填補,以便藉由右移Cm始終達成一有效的左移或右移。
若在C與乘積A*B之間存有一相對的減符號,尾數Cm提供給一負電路708,其會有條件將Cm加上負號(例如,使用1的補數負號)。相對的減符號可在符號路徑520中偵測,如下述,且符號控制信號SignCTL指示一相對減符號是否出現。負電路708的輸出(或Cm或~Cm)係提供給移位電路706。
在一具體實施例中,移位電路706是一217位元桶式移位器(Barrel Shifter),其能以多達157位元將54位元尾數Cm右移;Sh_C信號可決定Cm右移量。尾數Cm可有利地使用一對準以輸入移位器,以致於Cm可依需要儘可能右移。217位元大小可選擇,以便有可供53位元尾數Cm(加一保護位元與一捨入位元)的充足空間整個向左排列,或整個向106位元乘積A*B(加上一保護位元與一捨入位元作為乘積)的右邊排列,其會是217位元欄位的MSB右邊的排列55位元。桶式移位器的右移移出的任何位元會被丟棄。在其他具體實施例中,一旗標位元可使來保持追蹤從桶式移位器右移移出的所有位元是否為「I」,且此資訊可用在下述的捨入運算。
在一替代具體實施例中,習知交換多工器可用來在乘積Am*Bm及Cm之間選擇較大的運算元,然後將較小的運算元右移。
對於D2D運算而言,尾數Cm亦提供給一D2D邏輯電路710。D2D邏輯電路710係接收尾數Cm、指數Ce與符號CS,並應用整數捨入規則。在一具體實施例中,D2D邏輯電路710係基於指數Ce以決定二進制小數點的位置,然後基於一OPCTL信號(未在圖明確顯示)應用選定的捨入規則。可使用實施捨入模式的習知邏輯,並可支援捨入模式的任何組合,包括(但未限於)截掉、捨入至正無限大(ceil)、捨入至負無限大(floor)、和最近數值。
選擇多工器712係從U/S擷取電路628(第六圖)接收移位的尾數C_Shift、D2D邏輯電路輸出、與I2D輸入,並基於一OPCTL信號,選擇這些輸入之一者作為供應給尾數路徑516的一對齊尾數C_align。對於倍精確算術運算與比較運算而言,可選擇運算元C_Shift。對於格式轉換D2D或I2D而言,可選擇適當的替代輸入。
下限溢位邏輯713係組態成以fp64和fp32結果偵測潛在下限溢位。針對除了D2F運算以外之其他運算,下限溢位邏輯713可決定11位元fp64區塊指數BLE是否為零或相當接近零,此時,一反向規格化結果是可能的。基於區塊指數,下限溢位邏輯713可決定在指數到達零之前,可將尾數左移的最大位元數目。此數目可以8位元下限溢位信號U_fp64提供給尾數路徑516(請參見第八圖)。對於D2F運算而言,指數可視為一8位元fp32指數,且下限溢位邏輯713可決定允許的最大左移。此數目可以8位元下限溢位信號U_fp32提供給尾數路徑516。
指數路徑518亦包括最後指數計算邏輯電路704。區塊指數BLE係提供給一減算電路720。而且提供給減算電路720是來自尾數路徑516的一區塊移位(BL_Sh)信號。如下述,當乘積Am*Bm加至運算元C_align時,BL_Sh信號係反映取消MSB的影響。減算電路720是從BLE減去BL_Sh,以決定一差EDIF。下限溢位/上限溢位電路722係偵測減算結果EDIF中的下限溢位或上限溢位。加1電路724係將1加至結果EDIF,且基於該下限溢位/上限溢位條件,多工器720是將在EDIF與EDIF+1信號之間選擇為結果指數Re。結果Re與下限溢位/上限溢位信號(U/O)係提供給輸出區段522。
C.尾數路徑
第八圖為根據本發明之一具體實施例的尾數路徑516之區塊圖。尾數路徑516係執行運算元A、B和C尾數的乘積及加總運算。
53x53乘法器802係從運算元準備區塊514接收尾數Am和Bm(如上述),並計算一106位元乘積Am*Bm。該乘積係提供給一168位元加法器804,該加法器亦接收對齊的尾數C_align。桶式移位器706使用的217位元欄位的結尾位元可丟棄,或指出結尾位元是否為非零或全部是1的旗標位元可保持。加法器804係產生Sum和~Sum(加總的2補數)輸出。多工器806係基於該加總的MSB(符號位元),以在Sum和~Sum之間選擇。選定的加總(S)係提供至一零偵測電路814及一左移電路816。零偵測電路814可決定選定的加總S是否為零,並提供一對應的R_ZERO信號至符號路徑520。
尾數路徑516亦使加總S正規化。前導零偵測(LZD,“Leading Zero Detection”)係使用LZD電路808、810在Sum和~Sum上同時執行。每一LZD電路808、810係產生一LZD信號(Z1、Z2),表示在其輸入中的前導零數字。一LZD多工器812係基於加總的MSB(符號位元)以選擇相關的LZD信號(Z1或Z2)。若多工器806選擇Sum,則選擇Z2,且若多工器806選擇~Sum,則選擇Z1。選定的LZD信號係以區塊移位信號BL_Sh提供至指數路徑518,其中該信號是用來調整如上所述的結果指數。
正規化邏輯818係選擇一左移量Lshift,其可決定加總S的一正規化移位。對於正常數字結果而言,有利地係,左移量可大到足以將前導1移出尾數欄位,留下52位元有效數字(加上保護與捨入位元)。然而,在一些實例中,結果是一下限溢位,其應該是以fp64或fp32反向規格化表示。在一具體實施例中,對於除了D2F的運算之外,除非BL_Sh係大於下限溢位信號U_fp64之外,否則正規化邏輯818係從LZD多工器812選擇輸出BL_Sh,在此情況,正規化邏輯818將U_fp64選用為左移量。對於D2F運算而言,正規化邏輯818係使用fp32下限溢位信號U_fp32以限制左移量Lshift。
左移電路816係依Lshift量將加總S予以左移。結果Sn係提供給捨入邏輯820、加1加法器822與一尾數選擇多工器824。捨入邏輯820可有利地實施為IEEE標準算術運算而定義的四個捨入模式(最近值、捨入至負無限大(floor)、捨入至正無限大(ceil)與截掉),藉由不同模式可選擇不同結果。OPCTL信號或另一控制信號(未在圖顯示)可用來指定任一捨入模式。基於捨入模式與正規化加總Sn,捨入邏輯820可決定是否選擇由加1加法器822所計算的結果Sn或Sn+1。藉由選擇適當的結果(Sn或Sn+1),選擇多工器824可回應來自捨入邏輯820的一控制信號。
多工器824選擇的結果係傳遞至一格式化區塊826。對於具有一浮點輸出的運算而言,格式化區塊826提供尾數Rm至輸出區段522。有利地係,加總S是至少64位元寬度(支援整數運算),且格式化區塊826亦可移除無關重要的位元。對於D2I運算(具有整數輸出)而言,格式化區塊826係將結果分成一52位元int_L欄位(包含LSB)、與一11位元int-M欄位(包含MSB)。Rm、int_L和int_M係傳遞至輸出區段522。
D.信號路徑
第九圖為根據本發明之一具體實施例的符號路徑520之區塊圖。符號路徑520係從運算元準備區塊514(第五圖)接收運算元As、Bs、和Cs的符號。符號路徑520亦接收來自尾數路徑516的零結果信號R_ZERO、與一OPCTL信號,以指出運算進行的類型、以及來自運算元準備區塊514的特別數字信號SPC。基於此資訊,符號路徑520係決定結果的符號及產生一符號位元RS。
更明確地係,符號路徑520包括一乘積/加總電路902與一最後符號電路904。乘積/加總電路902係接收來自運算元準備區塊514的運算元A、B和C之符號位元As、Bs和Cs。乘積/加總電路902係使用符號位元As和Bs、與習知符號邏輯規則以決定乘積A*B的符號(Sp),然後將乘積的符號與符號位元CS相比較,以決定乘積與運算元C是否具有相同符號或相反符號。基於該決定,乘積/加總電路904可確證或取消確證SignCTL信號,此信號係傳遞至指數路徑518(第七圖)中的最後符號電路904與負區塊708。此外,若乘積與運算元C具有相同符號,最後結果亦將具有該符號;若乘積與運算元C具有相反符號,則結果將取決於較大一者。
最後符號電路904係接收決定最後符號所需的所有資訊。明確地係,最後符號電路904係接收符號資訊,包括乘積的符號Sp、與來自乘積/加總電路902的SignCTL信號、以及符號位元As、Bs和Cs。最後符號電路904亦接收來自尾數路徑516的零偵測信號R_ZERO、及來自運算元準備區塊514的特別數字信號SPC。最後符號電路904亦在尾數路徑516上接收來自加法器804的加總的MSB,其可指示該加總是否為正或負。
基於此資訊,最後符號電路904可將習知的符號邏輯用來決定結果的一符號位元Rs。例如,對於DFMA運算而言,若符號位元Sp和Cs是相同,結果亦將具有該符號。若Sp和Cs是相反的符號,則尾數路徑516中的加法器804計算(Am*Bm)-C_align。若Am*Bm大於C_align,則加法器804將計算一正結果Sum,且應該選擇乘積符號Sp;若Am*Bm是小於C_align,則加法器804將計算一負結果Sum,且應該選擇符號Cs。加法器804的Sum輸出的MSB係表示結果的符號,並可用來驅動此項選擇。若結果Sum是零,則可確定R_ZERO信號,且如適用,最後符號電路904亦可選擇任一符號(零可為fp64格式的正或負)。對於其他運算而言,最後符號電路904可使一或另一運算元的符號通過,做為最終的符號。
E.輸出區段
第十圖為根據本發明之一具體實施例的DFMA單元320的輸出區段522之區塊圖。
輸出多工器控制邏輯1002係接收來自指數路徑518(第七圖)的下限溢位/上限溢位(Underflow/Overflow,U/O)、來自運算元準備區塊514(第六圖)的R_test和SPC信號、及一OPCTL信號,以表示運算進行的類型。基於此資訊,輸出多工器控制邏輯1002產生選擇控制信號,以用於一有效數字選擇多工器1004與一指數選擇多工器1006。輸出多工器控制邏輯1002亦產生條件碼信號COND,其可表示例如上限溢位或下限溢位、NaN或其他條件。在一些具體實施例中,在DSET運算期間,條件碼亦用來發信通知布林結果。
有效數字選擇多工器1004係從尾數路徑516接收結果有效數字Rm,且多達52位元的一整數輸出(在D2I運算期間使用)、以及許多特別值。在一具體實施例中,特別值包括:一些1的52位元欄位(用來表示D2I運算的最大64位元整數);一些零的52位元欄位(在結果為0.0或1.0時使用);一52位元欄位0x0_0000_8000_0000(用來表示D2I運算的最小32位元整數);一具前導1的52位元欄位(用來表示內部產生的未明NaN);一max_int32值,例如,0x7fff_ffff_ffff_ffff(用來表示D2I運算的最大32位元整數);一未明的NaN值(用來使一輸入運算元通過,此運算元係來自運算元準備區塊514的NaN);及一min_denorm值,例如,在最後位元位置的1(用於下限溢位)。任一輸入可選擇,此係取決於運算及任何一運算元或結果是否為一特別數字。
指數選擇多工器1006係從指數路徑518接收結果指數Re,且多達11個整數位元(MSB代表整數格式輸出)、以及許多特別值。在一具體實施例中,特別值包括:0x3ff(指數代表fp64格式的1.0)、0x000(指數代表反向規格化和0.0)、0x7fe(最大fp64指數代表正常數字)及0x7ff.(代表fp64 NaN或INF結果)。任一輸入可選擇,此係取決於運算及任一運算元或結果是否為一特別數字。
串接區塊1008係接收符號位元Rs、有效數字選擇多工器1004選擇的有效數字位元、與指數多工器1006選擇的指數位元。串接區塊1008係格式化結果(例如,按照IEEE 754標準的符號、指數、有效數字順序),並提供64位元輸出信號OUT。
F.運算元旁路或通過路徑
在一些具體實施例中,DFMA單元320提供旁路或通過路徑,以讓運算元將不修改者傳遞通過電路區塊。例如,在一些運算期間,乘法器802係將一輸入(例如Am)乘以1.0,有效地通過輸入Am。可提供乘法器802附近的輸入Am之一旁路,而不是將Am乘以1.0。旁路可有利地消耗與乘法器802相同的時脈週期數目,致使Am可在正確時間抵達加法器804的輸入。但是當旁路過乘法器802時,該乘法器可設定成一非作用或低電力狀態,藉此減少與微小增加電路面積交換的功率消耗。同樣地,在一些運算期間,加法器804是用來將零加至一輸入(例如,C_align),有效地通過輸入C_align。不是將零加至C_align,而是可提供加法器804附近的輸入C_align之旁路,特別是對於預先已知多工器806所要選擇加法器804的Sum和~Sum輸出之一者的運算;輸入C_align可旁路至Sum和~Sum路徑之正確一者。再次,旁路可有利地消耗與加法器804相同的時脈週期數目,以便不影響時序,但是因為加法器804可於旁路過加法器本身的運算之時,使本身置於一非作用或低電力狀態,所以可減少功率消耗。
因此,在第3節(下面)的操作描述是指旁路或通過至一特定電路區塊的各種運算元;應該瞭解,此可藉由控制任何介入的電路區塊執行不影響運算元(例如,加零或乘以1.0)的運算予以完成,以便區塊的輸入可通過予以輸出或藉由使用一旁路。此外,遵循一些電路區塊附近之一旁路或通過路徑不必然需要在隨後電路區塊上持續遵循該旁路。此外,一電路區塊中修改的一數值可遵循一隨後電路區塊附近的旁路。在一運算期間所旁路之一特定電路區塊情況中,該電路區塊可設定成一非作用狀態以減少功率消耗或允許與其要忽略的輸出正常操作,例如,透過使用選擇多工器或其他電路元件。
應該明白,在此描述的DFMA單元只是說明,且各種變化及修改是可能的。在此描述的許多電路區塊提供習知的功能,並可使用在技術中熟知的技術加以實施;因此,省略了這些區塊的詳細描述。操作電路的區塊細分可修改,且不同區塊可組合或改變。此外,管線級數目與特定電路區塊的分配、或特定管線級的操作亦可修改或改變。對於一特定實施的電路區塊選擇與配置將取決於所要支援的運算集,且熟諳此項技術人士應該明白,不是所有在此描述的區塊需用於每一可能運算的組合。
3.DFMA單元運算
DFMA單元320係以面積效率方式,有利地利用上述電路區塊支援在第四圖中列出的所有運算。因此,DFMA單元320的運算係取決於執行運算的至少一些方面。下列部分描述將DFMA單元320用來執行在第四圖中列出的每一運算。
應該注意,浮點異常(包括,例如上限溢位或下限溢位條件)是在DFMA單元320中處理,不需要額外處理週期。例如,一輸入運算元是NaN或其他特別數字之運算是在第五圖的運算元準備區塊514中偵測,且一適當特別數字輸出是在輸出區段522中選擇。在一NaN、下限溢位、上限溢位或其他特別數字發生在運算過程的情況,條件係可偵測,且一適當特別數字輸出可在輸出區段522中選擇。
A.融合乘加(DFMA)
對於DFMA運算而言,DFMA單元320係接收fp64格式的運算元A0、B0和C0;及一運算碼,以指示是否執行DFMA運算。NaN電路612、614、616係決定選定運算元之任一者是否為NaN。如適用,絕對值/負電路618、620、622可針對每一運算元加負符號位元(或不加負號)。運算元選擇多工器632、634、和636係選擇絕對值/負電路618、620、622的個別輸出,並提供這些輸出至特別數字偵測電路638、640、642。特別數字偵測電路638、640和642係決定每一運算元是否為一特別數字,並在路徑524上產生適當的特別數字SPC信號。特別數字偵測電路638、640和642係提供尾數Am、Bm和Cm(具前導1附加於正常數字,且前導零附加於反向規格化)至尾數路徑516;提供指數Ae、Be和Ce至指數路徑518;及提供符號位元As、Bs和Cs至符號路徑520。
A/B比較電路624、fp32擷取電路626和U/S整數擷取電路628係不用於DFMA運算,且若需要,這些電路可設定成一非作用或低電力狀態。
在符號路徑520中,乘積/加總電路902是從符號位元As和Bs決定乘積A*B是否為正或負,並比較乘積Sp的符號與符號位元Cs。若乘積與Cs具有相反的符號,可確定SignCTL信號係表示相反符號;若乘積與Cs具有相同符號,則取消確證SignCTL信號。
在指數路徑518(第七圖)中,指數計算區塊702係接收指數Ae、Be和Ce。指數計算區塊702係加入指數Ae和Be,以決定乘積A*B的區塊指數,然後將乘積區塊指數與指數Ce之較大者選為結果區塊指數BLE。指數計算區塊702亦從兩者之較大者減去乘積區塊指數與指數Ce之較小者,並產生一對應的移位控制信號Sh_C。下限溢位邏輯713係偵測區塊指數BLE是否對應至一下限溢位或潛在下限溢位,並產生下限溢位信號U_fp64(在DFMA運算期間不使用U_fp32信號)。
負區塊708係從運算元準備區塊514接收尾數Cm,並從符號路徑520接收SignCTL信號。若確定SignCTL信號,負區塊708將尾數Cm予以反轉表示相對減符號,並提供反轉的Cm至移位電路706。否則,負區塊708提供沒有修改的Cm至移位電路706。
移位電路706係以對應至移位控制信號Sh_C的量,將負區塊708提供的尾數Cm予以右移,並提供移位的C_Shift尾數至選擇多工器712。選擇多工器712係選擇移位的尾數C_Shift,並如運算元C_align,將該移位的尾數提供至尾數路徑516。
在尾數路徑516(第八圖)中,乘法器802係計算106位元乘積Am*Bm,並提供該乘積至168位元加法器804。乘法器802的運算可與指數計算區塊702的運算同時發生。
加法器804係從指數路徑518的選擇多工器712接收運算元C_align,並加入輸入Am*Bm和C_align,以決定Sum和~Sum。基於Sum的MSB,多工器806係將輸出之一者選擇為最後的總數。若Sum是正(MSB是零),則選擇Sum,而若Sum是負(MSB是1),則選擇~Sum。LZD電路808和810係分別決定~Sum和Sum的前導零數字;多工器812係將LZD輸出之一者選擇為前導零的數目,並提供前導零信號BL_Sh至指數路徑518與正規化邏輯818。
多工器806選擇的最後總數S亦提供至零偵測電路814。若最後總數是零,零偵測電路814斷定符號路徑520為R_ZERO信號;否則,不是R_ZERO信號。
除非U_fp64信號指示一下限溢位,否則正規化邏輯818將前導零信號選擇為正規化信號Lshift,在此情況,尾數只移位至對應至1的指數之點,致使結果會以非正規化形式表達。移位電路816係回應Lshift信號以將選定的加總S左移,以產生一正規化的總數Sn。加1加法器822是將1加至正規化總數Sn。捨入邏輯820係使用捨入模式(藉由一OPCTL信號指定)與正規化總數Sn(在路徑821上)的LSB,以決定正規化總數是否應該捨入。若確證,則捨入邏輯820控制選擇多工器824,以從加法器822選擇輸出Sn+1;否則;選擇多工器824選擇正規化總數Sn。選擇多工器824提供選定的結果Rm至輸出區段522。在一些具體實施例中,選擇多工器824係從結果尾數丟棄前導位元(1係表示正常數)。
在與捨入運算的同時,指數路徑518(第七圖)係計算結果指數Re。明確地係,減算區塊720係從指數計算區塊702接收區塊指數BLE、及從尾數路徑516接收區塊移位信號BL_Sh。減算區塊720係從其減去兩輸入,並提供結果EDIF至下限溢位/上限溢位邏輯722、加1加法器724、及選擇多工器726。下限溢位/上限溢位邏輯722係使用結果的MSB以決定一下限溢位或上限溢位是否發生,並產生U/O信號,以反映是否出現下限溢位或上限溢位。基於U/O信號,選擇多工器726是在減算結果EDIF與加1加法器724的輸出之間選擇。選定的值係以結果指數Re、連同U/O信號同時提供給輸出區段522。
在與捨入運算的同時,符號路徑520(第九圖)中的最後符號電路904可決定最後符號Rs,其決定係基於乘積/加總電路902所決定之符號;R_ZERO信號及從尾數路徑516接收的加總之MSB;及從運算元準備區塊514接收的特別數字SPC信號。
輸出區段522(第十圖)係從尾數路徑516接收結果尾數Rm,從指數路徑518接收結果指數Re,及從符號路徑520接收結果信號Rs,以及從運算元準備區塊514接收特別數字SPC信號,及從指數路徑518接收U/O信號。基於SPC和U/O信號,輸出多工器控制邏輯1002係產生用於有效數字多工器1004的一控制信號,及用於指數多工器1006的一控制信號。輸出多工器控制邏輯1002亦產生不同條件碼COND,例如指示結果是否為一上限溢位、下限溢位或NaN。
有效數字多工器1004係選擇正常數字與反向規格化的有效數字Rm。對於下限溢位而言,可選擇零或mindenorm有效數字,此係取決於捨入模式。對於上限溢位(INF)而言,選擇有效數字0x0_0000_0000_0000。在任何輸入運算元是NaN的情況,可選擇未明的NaN有效數字。若在運算期間產生NaN,可選擇內部(未明)NaN尾數0x8_0000_0000。
指數多工器1006選擇正常數字的結果指數Re。對於反向規格化與下限溢位而言,選擇指數0x000。對於INF或NaN而言,選擇最大指數0x7ff。
串接區塊1008係接收選定的有效數字與指數及符號Rs,並產生最終的fp64結果OUT。條件碼可依需要加以設定。
應該注意,DFMA單元320是在相同週期數目內完成所有DFMA運算,不管是上限溢位或下限溢位。根據IEEE 754標準,DFMA單元320亦實施浮點算術運算的預期之預設上限溢位/下限溢位行為:傳回一適當結果OUT,且一狀態旗標(在條件碼COND中)係設定成指示上限溢位/下限溢位條件。在一些具體實施例中,使用者定義的陷阱(Trap)可實施以處理這些條件;條件碼COND可用來決定一陷阱是否應該發生。
B.乘算
乘算(DMUL)可類似上述運算元C設定成零的DFMA運算加以實施;DFMA單元320然後計算A*B+0.0。在一具體實施例中,當運算碼指示DMUL運算時,選擇多工器636(第六圖)可用來將fp64零值取代輸入運算元C。
C.加算
加算(DADD)可類似上述運算元B設定成1.0的DFMA運算加以實施;DFMA單元320然後計算A*1.0+C。在一具體實施例中,當運算碼指示DADD運算時,選擇多工器634(第六圖)可用來將fp64 1.0值取代輸入運算元B。
D.DMAX和DMIN
對於DMAX或DMIN運算而言,運算元準備區塊514(第六圖)係接收運算元A和B。NaN電路612和614係決定所選定運算元之一者或二者是否為NaN。如適當,絕對值/負電路618、620可加負符號位元(或不加負號)。
A/B比較電路624是從絕對值/負電路618、620接收運算元A和B,並例如藉由從A減去B執行比較,倘若運算元為整數。基於該減算,A/B比較電路624可產生COMP信號,指出A是否大於、小於、或等於B。COMP信號係提供至控制邏輯630,此產生對應的R_Test信號,並亦產生關於選擇多工器632、634和636的選擇信號。
明確地係,對於DMAX運算,若A大於B,運算元A多工器632係選擇運算元A,且若A小於B,則選擇運算元1.0;當若B大於A時,運算元B多工器634選擇運算元B,若B小於A,則選擇運算元1.0。對於DMIN運算而言,若A小於B,運算元A多工器632選擇運算元A,且若A大於B,則選擇運算元1.0;當若B小於A時,運算元B多工器634選擇運算元B,且若B大於A,則選擇運算元1.0。對於DMAX和DMIN二者而言,A=B的特別情況可藉由控制多工器632加以處理,以選擇運算元A,而多工器634係選擇運算元1.0,或藉由控制多工器632以選擇運算元1.0,而多工器634選擇運算元B。無論如何,運算元C多工器636可有利地操作以選擇運算元0.0。
特別數字偵測電路638、640和642係決定運算元是否為特別數字,並在路徑524上產生適當的特別數字SPC信號。特別數字偵測電路638、640和642係提供尾數Am、Bm和Cm(具有前導1附加於正常數字,且前導零附加於反向規格化)至尾數路徑516;提供指數Ae、Be和Ce至指數路徑518、及提供符號位元As、Bs和Cs至符號路徑520。
fp32擷取電路626與無符號/有符號整數擷取電路628是不用於DMAX或DMIN運算,且若需要,這些電路可設定成一非使用或低電力狀態。
尾數路徑516、指數路徑518與符號路徑520的操作係如上述關於DFMA運算。對於DMAX運算而言,尾數路徑516、指數路徑518與符號路徑520係計算max(A,B)*1.0+0.0;對於DMIN運算而言,尾數路徑516、指數路徑518與符號路徑520係計算min(A,B)*1.0+0.0。因此,對於正常數字而言,Rm、Re和Rs係對應至想要結果的尾數、指數與符號。
輸出區段522(第十圖)係處理特別數字。特別地係,DMAX和DMIN運算的結果並未針對NaN運算元加以定義,且該結果可設定成一NaN值。輸出多工器控制邏輯1002係使用特別數字SPC信號以決定結果是否應該為NaN;若確證,有效數字多工器1004係選擇未明的NaN輸入,而指數多工器係選擇0x7ff。否則,選擇結果Rm和Re。條件碼可依需要予以設定。
在一替代具體實施例中,有尾數路徑516、指數路徑518和符號路徑520的一些或所有組件可省略;省略的組件可置於一低電力狀態。旁路可包括各種延遲電路(閂鎖等),以便路徑占用與尾數路徑516、指數路徑518和符號路徑520的最長的相同管線級數目。此可確保DFMA單元320中所有運算需要完成的相同週期數目,此簡化指令發送邏輯。
E.DSET
類似DMAX和DMIN,DSET運算係使用運算元準備區塊514(第六圖)中的A/B比較電路624。不像DMAX和DMIN,DSET不會傳回輸入運算元之一者,而是傳回一布林值,以指出是否滿足測試的條件。
對於DSET運算而言,運算元準備區塊514(第六圖)係接收運算元A和B。NaN電路612和614係決定所選定的運算元之任一者或二者是否為NaN。如適用,絕對值/負電路618、620可加負符號位元。
A/B比較電路624是從絕對值/負電路618、620接收運算元A和B,及例如藉由從A減去B執行比較,倘若運算元是整數及考慮其個別符號位元。基於該減算,A/B比較電路624可產生COMP信號,指出A是否大於、小於或等於B。COMP信號係提供至控制邏輯630,以產生對應R_Test信號,並亦產生A多工器632、B多工器634、和C多工器636的選擇信號。由於DSET運算的結果是布林,所以在一具體實施例中,所有三個多工器632、634和636都選擇零運算元。在另一具體實施例中,多工器632和634選擇運算元A和B;特別數字偵測電路638和640決定運算元是否為特別數字,並在路徑524上產生適當的特別數字SPC信號。
fp32擷取電路626與無符號/有符號整數擷取電路628是不用於DSET運算,且若需要,這些電路可設定成一非使用或或低電力狀態。
尾數路徑516、指數路徑518與符號路徑520的操作係如上述關於DFMA運算,或可侷部或全部省略。任何省略的組件可置於一低電力狀態。如上述,旁路路徑可包括各種延遲電路(閂鎖等),以便路徑占用與尾數路徑516、指數路徑518與符號路徑520的最長相同的管線級數目。此可確保DFMA單元320的所有運算需要完成的相同週期數目,此簡化指令發送邏輯。
輸出區段522(第十圖)係處理特別數字。特別地係,根據IEEE 754標準,若A或B(或二者)是NaN,A和B是無順序。輸出多工器控制邏輯1002係接收R_Test信號,以指示A是否大於、小於、或等於B;特別數字SPC信號指出A 或B是否為NaN;及一OPCTL信號指出是否要求特定測試操作。輸出多工器控制邏輯1002係使用R_Test和SPC信號以決定是否滿足要求的測試。在一具體實施例中,一DSET運算的結果係以一條件碼加以提供,並忽略結果OUT;在此情況中,輸出多工器控制邏輯1002係設定條件碼COND以指示結果,並可任意選擇輸出OUT的有效數字與指數。在另一具體實施例中,輸出OUT可設定,以反映測試結果,在此情況中,輸出多工器控制邏輯1002係操作有效數字多工器1004與指數多工器1006,以若滿足此測試,選擇對應至邏輯TRUE(真)的64位元值;若不滿足此測試,則選擇對應至邏輯FALSE(假)的64位元值。
F.格式轉換
在一些具體實施例中,DFMA單元320亦支援來回於倍精確度格式的格式轉換操作。現將描述下列一些範例。
1.fp32至fp64(F2D)
對於F2D運算而言,一fp32輸入運算元A係轉換成一對應的fp64數字。特別數字輸入係適當地處理;例如,fp32 INF或NaN係轉換成fp64 INF或NaN。所有fp32反向規格化可轉換成fp64正常數字。
運算元準備區塊514(第六圖)係接收fp32運算元A。絕對值/負電路618可使無需修改的運算元A通過至fp32擷取區塊626。fp32擷取區塊626係執行運算元A至fp64格式的初始向上轉換。明確地係,fp32擷取區塊626係擷取8位元指數,並加入1023-127=896,以產生具有fp64格式的正確偏移之11位元指數。23位元尾數係使用尾零填補。fp32擷取區塊626亦決定運算元A是否為一fp32特別數字(例如,INF、NaN、零或反向規格化),並經由路徑644提供該資訊至特別數字偵測電路642。fp32擷取區塊626亦可否定或應用絕對值至運算元。
運算元C多工器636係選擇由fp32擷取區塊626提供的向上轉換運算元;運算元A多工器632與運算元B多工器634係選擇零運算元。除非運算元是一fp32反向規格化,否則特別數字偵測電路642可預先考慮尾數的一前導1。除了fp32反向規格化係視為正常數字之外,特別數字偵測電路642亦使用由fp32擷取區塊626提供的特別數字資訊,當作是其特別數字SPC信號(因為所有fp32反向規格化能夠以fp64的正常數字予以表示)。
尾數路徑516與指數路徑518的操作係如上述以fp64格式計算0.0*0.0+C的DFMA運算。尾數路徑516與指數路徑518中的正規化元件係使向上轉換的fp64運算元正規化。在一替代具體實施例中,請即參考第八圖,來自指數路徑518的對齊尾數C_align可在尾數路徑516的加法器804附近旁路至多工器806的Sum輸入;乘法器802與加法器804可置於一低電力狀態。符號路徑520可有利地使符號位元Cs通過。
在輸出區段522(第十圖)中,除非特別數字SPC信號指示輸入運算元是fp32 INF、NaN或零,否則選擇正規化的fp64結果(Rm、Rs、Re)。若輸入運算元是fp32INF,輸出多工器控制邏輯1002操作有效數字多工器1004選擇fp64 INF有效數字(0x0_0000_0000_0000),及操作指數多工器1006選擇fp64 INF指數(0x7ff)。若輸入運算元是fp32NaN,輸出多工器控制邏輯1002操作有效數字多工器1004以選擇fp64未明NaN有效數字,及操作指數多工器1006以選擇fp64NaN指數(Ox7ff)。若輸入運算元是fp32零,輸出多工器控制邏輯1002操作有效數字多工器1004選擇fp64零有效數字(0x0_0000_0000_0000),及操作指數多工器1006以選擇fp64零指數(0x000)。條件碼可依需要予以設定。
2.整數至fp64(I2D)
對於I2D運算而言,一整數(u64、s64、u32或s32格式)係轉換成fp64格式。運算元準備區塊514(第六圖)係接收64位元整數運算元C。對於32位元整數格式而言,32個前導零可預先考慮。絕對值/負電路622可使無需修改的運算元C通過至U/S擷取區塊628。U/S擷取區塊628係執行運算元C至fp64格式的初始轉換。明確地係,擷取區塊628係決定運算元C(例如,使用一優先權編碼器)中前導1的位置。一11位元指數係藉由將一指數欄位初始化成1086(對應至263 )而決定。對於32位元輸入格式而言,丟棄前導1,並使用尾零填補尾數,以產生52位元有效數字。對於64位元輸入格式而言,若需要53位元,將尾數截掉,並丟棄前導1。若需要,可保留一保護位元與捨入位元。
U/S擷取區塊628亦決定輸入運算元是否為零,並為特別數字偵測電路642產生一對應的控制信號。其他特別數字(反向規格化、INF和NaN)不會在I2D運算期間發生,且不需要偵測。
運算元C多工器636係選擇藉由U/S擷取區塊628提供的向上轉換之運算元;運算元A多工器632與運算元B多工器634之每一者係選擇零運算元。特別數字偵測電路642係使用藉由U/S擷取區塊628提供的零資訊產生一特別數字SPC信號,以指出輸入運算元是否為零。
尾數路徑516與指數路徑518的操作係如同上述關於計算0.0*0.0+C的DFMA運算。尾數路徑516與指數路徑518中的正規化元件係使向上轉換的fp64運算元予以正規化。在一替代具體實施例中,來自指數路徑518的對齊尾數C_align可在尾數路徑516的加法器804附近旁路至多工器806的Sum輸入;乘法器802與加法器804可置於一低電力狀態。符號路徑520可有利地使符號位元Cs通過。
在輸出區段522(第十圖)中,除非特別數字SPC信號指示輸入運算元是整數零,否則選擇正規化的fp64結果(Rm、Rs、Re)。若輸入運算元是整數零,輸出多工器控制邏輯1002則操作有效數字多工器1004以選擇fp64零有效數字(0x0_0000_0000_0000),及操作指數多工器1006以選擇fp64零指數(0x000)。條件碼可依需要加以設定。
3.fp64至fp32(D2F)
由於fp64比fp32涵蓋更大範圍的浮點值,所以從fp64轉換至fp32(D2F)需要偵測在fp32值中的上限溢位與下限溢位。
對於D2F運算而言,運算元C係提供給運算元準備區塊514(第六圖)。絕對值/負電路622可依需要執行絕對值或運算元負,並將運算元C傳遞至運算元C多工器636,選擇運算元C以提供給特別數字偵測電路642。特別數字偵測電路642可偵測fp64反向規格化、零、INF或NaN,並提供對應的SPC信號至輸出區段522。選擇多工器632和634可選擇0.0運算元。
在指數路徑518(第七圖)中,指數計算區塊702是以897將fp64指數向下偏移,以決定一對應的fp32指數。若fp32指數係下限溢位,指數計算區塊702產生一Sh_C信號,此將使C的尾數向右移位以除去下限溢位(若需要217位元以上的移位,C的尾數將變成零)。移位電路706將根據Sh_C信號使C的尾數向右移位。結果將由多工器712選擇,並以對齊的尾數C_align提供給尾數路徑516。下限溢位邏輯713可偵測一fp32下限溢位及產生U_fp32信號。
在尾數路徑516(第八圖)中,乘法器802係計算乘積0.0*0.0(或旁路過)。乘積(零)是由加法器804加至尾數C_align。加總結果是由多工器806選擇(由於輸入是符號/數值形狀)。電路814可偵測零結果;非零結果的正規化是如上面DFMA運算情況的描述。捨入邏輯820可用來決定是否要捨入;應該注意,加1的加法器822需要將1加至第24位元位置(而不是第53位元位置),結果會是一23位元fp32尾數。
輸出區段522(第十圖)係組合該結果。23位元fp32有效數字是在52位元欄位Rm中提供。除非結果不是一fp32正常數字,否則輸出多工器控制邏輯1002可控制有效數字多工器1004以選擇Rm。對於fp32零或INF而言,選擇零的尾數0x0_0000_0000_0000;對於fp32NaN而言,選擇未明fp32NaN尾數。對於fp32反向規格化而言,可使用Rm。
8位元fp32指數是在一11位元指數欄位中提供。除非結果不是fp32正常數字,否則輸出多工器控制邏輯1002可控制指數多工器1004以選擇Re。對於fp32反向規格化或零而言,選擇零指數0x 000。對於fp32 INF或NaN而言,則選擇最大fp32指數0x7ff。
串接區塊1008係將Rm和Re裝入64位元輸出欄位的31位元,並附加符號位元Rs。11位元指數中的3MSB會被丟棄,如同在52位元有效數字中的29LSB。fp32結果可依需要例如在64位元欄位的MSB或LSB中對齊。條件碼可依需要予以設定。
4.fp64至整數(D2I)
對於D2I運算而言,可偵測上限溢位與下限溢位。上限溢位係設定成最大整數值,且下限溢位係設定成零。
待轉換的運算元被提供為fp64格式的運算元C。絕對值/負電路622可依需要執行絕對值或運算元負,並將運算元C傳遞給運算元C多工器636,選擇運算元C以提供給特別數字偵測電路642。特別數字偵測電路642可偵測fp64反向規格化、零、INF或NaN,並提供對應的SPC信號至輸出區段522。選擇多工器632和634選擇0.0運算元。
在指數路徑518(第七圖)中,指數計算區塊702係使用指數Ce以決定Cm的移位量,以對齊在整數位置的二進位點,並產生一對應的Sh_C信號。在一具體實施例中,指數計算區塊702係移除指數偏差,並說明有效數字的寬度、要使用的整數格式、與32位元格式的結果如何在64位元欄位中表示(例如,使用32MSB或32LSB)。指數Ce亦用來決定結果是否為目標整數格式的上限溢位或下限溢位;若確認,一對應的上限溢位或下限溢位信號(未在圖明確顯示)將有利傳送至輸出區段522(第十圖)中的輸出多工器控制邏輯1002。
移位電路706可依C_Shift量將Cm予以移位,且C_Shift信號係由多工器712選擇為C_align信號。
在尾數路徑516(第八圖)中,乘法器802提供0.0結果至加法器804。加法器804將0.0加入C_align,並選擇Sum或~Sum,此係取決於C是否為正或負值。移位器816可有利地不將結果移位。整數格式區塊826可將該結果分成一11位元MSB欄位int_M、與一53位元LSB欄位int_L。
在輸出區段522(第十圖)中,除了在一上限溢位、下限溢位或特別數字運算元的情況之外,輸出多工器控制邏輯1002可控制有效數字多工器1004與指數多工器1006,以分別選擇int_L和int_M結果。針對上限溢位,可選擇輸出格式(u32、s32、u64或s64)中的最大整數;針對下限溢位,可選擇零。條件碼可視需要加以設定。
4.進一步具體實施例
雖然本發明已描述關於特定具體實施例,但是熟諳此技術人士應明白許多修改是可能的。例如,一DFMA單元可實施,以支援更多、較少或不同的功能組合,並支援任何格式或更多格式組合的運算元與結果。
在此描述的各種旁路與通過路徑亦可改變。大體上,在描述任何電路區塊周圍的一旁路情況,該路徑可由該區塊中的一恆等操作(即是,對其運算元沒有影響的操作,例如加入零)所取代。在一給定操作期間省略的一電路區塊可置於一閒置狀態(例如,一減少電量狀態)或通常係以向下資料流區塊所忽略的結果進行操作,例如,透過選擇多工器或其他電路的操作。
DFMA管線可分成任何數量的階段,且每一階段的組件組合可視需要而予以變化。認定為在此特定電路區塊的功能亦可在管線級上分開;例如,一乘法器樹狀可占用多個管線級。不同區塊的功能亦可修改。在一些具體實施例,例如可使用不同加法器電路或乘法器電路。
此外,DFMA單元已促進瞭解的電路區塊描述;熟諳此項技術人士可確認,該等區塊可使用各種電路組件與佈局實施,且在此描述的區塊並未限於一組特定組件或實體佈局。可視需要將區塊實際組合或分開。
一處理器可包括一執行核心中的一或多個DFMA單元。例如,在超純量指令發送(即是,每週期發送一個以上指令)或SIMD指令發送想要的情況,可實施多個DFMA單元,且不同DFMA單元可支援功能的不同組合。一處理器亦可包括多個執行核心,且每一核心可擁有自己的DFMA單元。
在執行核心支援SIMD指令發送的一些具體實施例中,單一DFMA單元可與適當的輸入序列與輸出收集邏輯結合使用,使多個資料集可在單一DFMA管線中循序處理。
第十一圖為根據本發明之一具體實施例的包括一DFMA功能單元1102的執行核心1100之區塊圖。DFMA單元1102可類似或相似於上述的DFMA單元320。核心1100係發送SIMD指令,意謂具P不同組單精確度運算元的相同指令可同時發送至一組P單精確度SIMD單元1104。每一SIMD單元1104係接收相同運算碼與一不同組的運算元;P個SIMD單元1104係同時操作以產生P個結果。P通路SIMD指令是以一連串的P單指令、單資料(SISD,“Single-Instruction,Single Data”)指令發送至DFMA單元1102。
一輸入管理器1106(其可為一指令發送單元的一部分)係收集SIMD指令的運算元,且當已收集SIMD指令的所有P組運算元時,傳遞運算元與適用的運算碼至PSIMD單元1104或DFMA單元1102任一。一輸出收集器1008可從SIMD單元1104或DFMA單元1102收集結果,並經由結果匯流排1110,將結果傳遞至一暫存器檔案(未在第十一圖中明確顯示)。在一些具體實施例中,結果匯流排1110亦提供一旁路至輸入管理器1106,以便結果傳遞至輸入管理器1106,供與一隨後的指令一起使用,同時傳遞至暫存器檔案。為了要提供使用一DFMA單元1102的SIMD行為之外觀,輸入管理器1106可有利地將指令序列發送至DFMA單元1102,例如,藉由在P連續時脈週期之每一者上,發送相同運算碼與不同組的運算元。
第十二圖為根據本發明之一具體實施例顯示DFMA單元1102的序列指令發送之區塊圖。一輸入運算元收集單元1202(可包括在第十一圖的輸入管理器1106)包括兩收集器1204、1206。每一收集器1204、1206是32位元暫存器的配置,可提供P個三個一組單精確度運算元A、B和C的足夠空間;換句話說,每一收集器1204、1206可儲存單一SIMD指令的所有運算元。輸入運算元收集單元1202係例如從第三圖的暫存器檔案324、及/或從第十一圖的結果匯流排1110獲得運算元;標籤或其他習知技術可用來決定哪些運算元可被收集用於一給定的指令。足夠的收集器1206可提供,以在發送指令之前,允許在數個時脈週期內收集一給定指令的運算元。
對於單精確度指令而言,一收集器(例如,收集器1204)載入PSIMD單元1104需要的所有運算元以執行一指令。當指令發送給PSIMD單元1104時,整個收集器1204可有利地同時讀取,且不同A、B、C運算元三個一組係傳遞至SIMD單元1104之每一者。
對於DFMA單元1102的指令而言,運算元是倍精確度(例如,64位元)。可使用兩收集器1204、1206中的對應暫存器儲存每一運算元;例如,收集器1204中的暫存器1208可儲存運算元A的一實例的32MSB(例如,符號位元、11個指數位元、與有效數字的20MSB),而收集器1206中的暫存器1210可儲存相同運算元的32LSB(例如,有效數字的剩餘32位元)。如此可使用兩單精確度收集器1204、1206收集P通道倍精確度SIMD指令所需的所有運算元三個一組A、B、C。
核心1100只有一DFMA單元1102,且P運算元集係有利地使用輸出多工器(mux)1212、1214循序傳遞,其兩者是受到一計數器1216的控制。多工器1212和1214係回應計數器1216以從個別的收集器1204和1206選擇運算元三個一組的MSB和LSB。例如,在顯示的資料路徑中,多工器1212可從收集器1204中的暫存器1208選擇運算元A的32MSB,而多工器1214是從收集器1206中的暫存器1210選擇相同運算元A的32LSB。64位元是在一個倍精確度寬路徑上傳遞至DFMA單元1102。同樣地,使用相同計數器1216控制的對應多工器(未在圖明確顯示),運算元B(從暫存器1220和1222)和C(從暫存器1224和1226)可傳遞至DFMA單元1102。在下一時脈週期上,在傳遞所有P組運算元之前,來自收集器1204和1206中的下一組暫存器的運算元A、B、和C可傳遞至DFMA單元1102等。
多工器1212和1214、連同收集器1204和1206係一起提供DFMA單元1102的SIMD執行的外觀,雖然此減少了傳送量。因此,核心1100的編程模型可假設P通道SIMD執行可用於所有指令,包括倍精確度指令。
應該明白,在此描述的運算元集合及序列邏輯只是說明,且不同變化及修改是可能的。在一SIMD能力核心中,任何數量的DFMA單元可被提供,且指令可同時發送至任何數量的DFMA單元。在一些具體實施例中,有關單精確度運算的倍精確度運算之傳送量是與DFMA單元的數目成比例。例如,若存在P個SIMD單元與N個DFMA單元,倍精確度傳送量將會是單精確度傳送量的N/P。在一些具體實施例中,N最好是等於P;在其他具體實施例中,其他因數(例如,在暫存器檔案與功能單元之間的內部資料路徑的寬度)可將倍精確度傳送量限制在少於單精確度傳送量,不管提供的DFMA單元的數目。在此情況中,N最好是不大於允許的其他限制因素。
亦應該注意,由於DFMA單元是與單精確度功能單元分開,所以當不使用時,此單元可關閉電源,例如,當繪圖處理器或核心專門用於繪圖處理器或不需要倍精確度的其他計算。此外,DFMA單元可從積體電路設計移除,不會影響其他電路組件的操作。此可促進不同晶片提供不同程度倍精確度運算支援的乘積系列設計。例如,一GPU系列可包括一具許多核心的高端GPU,該等核心之每一者包括至少一DFMA單元;及一不具有硬體式倍精確度支援及沒有DFMA單元的低端GPU。
此外,雖然本發明已描述關於一繪圖處理器,但是熟諳此技術人士應該明白,本發明的態樣亦可使用在其他處理器,例如算術共處理器、向量處理器或一般目的處理器。
因此,雖然本發明已描述關於特殊具體實施例,但是應可明白本發明意欲涵蓋下列申請專利範圍的範疇內之所有修改及等效物。
100...電腦系統
102...中央處理單元
104...系統記憶體
105...記憶體橋接
106...匯流排或通訊路徑
107...輸入/輸出橋接
108...使用者輸入裝置
110...顯示裝置
112...繪圖子系統
113...匯流排或通訊路徑
114...系統磁碟
116...開關
118...網路轉接器
120...附加介面卡
121...附加介面卡
122...繪圖處理單元(GPU)
124...繪圖記憶體
200...繪圖管線
202...多執行緒核心陣列
204...前端
206...資料組合器
208...設定模組
210...光柵化器
212...彩色組合模組
214...光柵操作模組(ROP)
218...幾何模組
224...像素模組
226...訊框緩衝器
300...執行核心
302...拾取與分發單元
304...發送單元
320...倍精確度融合乘加(DFMA)單元
322...功能單元
324...暫存器檔案
326...資料傳輸路徑
502...運算元輸入路徑
504...運算元輸入路徑
506...運算元輸入路徑
508...運算碼路徑
510...信號路徑
512...信號路徑
514...運算元準備區塊
516...尾數路徑
518...指數路徑
520...符號路徑
522...輸出區段
524...信號路徑
530...控制區塊
612...NaN偵測區塊
614...NaN偵測區塊
616...NaN偵測區塊
618...絕對值/負區塊
620...絕對值/負區塊
622...絕對值/負區塊
624...比較電路
626...擷取電路
628...無符號/有符號(U/S)擷取電路
630...控制邏輯
632...運算元選擇多工器
634...運算元選擇多工器
636...運算元選擇多工器
638...特別數字偵測電路
640...特別數字偵測電路
642...特別數字偵測電路
702...指數計算電路
704...向下資料流最後指數計算電路
706...移位電路
708...負電路
710...邏輯電路
712...選擇多工器
713...下限溢位邏輯
720...減算電路
722...下限溢位/上限溢位電路
724...加1電路
726...選擇多工器
802...乘法器
804...加法器
806...多工器
808...LZD電路
810...LZD電路
812...LZD多工器
814...零偵測電路
816...移位電路
818...正規化邏輯
820...捨入邏輯
821...路徑
822...加1加法器
824...尾數選擇多工器
826...整數格式區塊
902...乘積/加總電路
904...最後符號電路
1002...輸出多工器控制邏輯
1004...有效數字選擇多工器
1006...指數選擇多工器
1008...串接區塊
1100...執行核心
1102...DFMA功能單元
1104...單精確度SIMD單元
1106...輸入管理器
1108...輸出收集器
1110...結果匯流排
1202...輸入運算元收集單元
1204...收集器
1206...收集器
1208...暫存器
1210...暫存器
1212...輸出多工器
1214...輸出多工器
1216...計數器
1220...暫存器
1222...暫存器
1224...暫存器
1226...暫存器
第一圖為根據本發明之一具體實施例的一電腦系統之區塊圖;
第二圖為根據本發明之一具體實施例,可在一繪圖處理單元中實施的一繪圖管線之區塊圖;
第三圖為根據本發明之一具體實施例的一執行核心之區塊圖;
第四圖列出根據本發明之一具體實施例,一個倍精確度功能單元可執行的倍精確度算術、比較運算與格式轉換操作;
第五圖為根據本發明之一具體實施例的一個倍精確度功能單元之簡化區塊圖;
第六圖為第五圖的倍精確度功能單元的一運算元預備區塊之區塊圖;
第七圖為第五圖的倍精確度功能單元的一指數路徑之區塊圖;
第八圖為第五圖的倍精確度功能單元的一尾數路徑之區塊圖;
第九圖為第五圖的倍精確度功能單元的一信號路徑之區塊圖;
第十圖為第五圖的倍精確度功能單元的一輸出區段之區塊圖;
第十一圖為根據本發明之一具體實施例的一執行核心之區塊圖;及
第十二圖為顯示根據本發明之一具體實施例的一倍精確度功能單元的運算元序列之區塊圖。
100‧‧‧電腦系統
102‧‧‧中央處理單元
104‧‧‧系統記憶體
105‧‧‧記憶體橋接
106‧‧‧匯流排或通訊路徑
107‧‧‧輸入/輸出橋接
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧繪圖子系統
113‧‧‧匯流排或通訊路徑
114‧‧‧系統磁碟
116‧‧‧開關
118‧‧‧網路轉接器
120‧‧‧附加介面卡
121‧‧‧附加介面卡
122‧‧‧繪圖處理單元(GPU)
124‧‧‧繪圖記憶體

Claims (17)

  1. 一種繪圖處理器,包含:一繪圖管線,其調適成產生影像資料,該繪圖管線包括一處理核心,其調適成可執行複數個同時發生的執行緒,其中該繪圖管線是在單精確度運算元上運算;該處理核心更包括一多用途倍精確度功能單元,其調適成選擇性執行一組倍精確度輸入運算元的複數個倍精確度運算之一,該多用途倍精確度功能單元包括至少一算術邏輯電路,該些倍精確度運算包括一將兩個倍精確度運算元相加的加法運算、一將兩個倍精確度運算元相乘的乘法運算、和一融合乘加法運算,該融合乘加法運算計算一第一倍精確度運算元和一第二倍精確度運算元的乘積,再將一第三倍精確度運算元加上該乘積,其中該多用途倍精確度融合乘加功能單元有足夠寬度以在一單一通過中執行該些倍精確度運算的每一個,使得該些倍精確度運算的每一個在相同時脈週期數目中完成;其中該倍精確度功能單元的所有算術邏輯電路有足夠寬度以倍精確度運算。
  2. 如申請專利範圍第1項之繪圖處理器,其中該倍精確度功能單元係進一步調適,使得該複數個倍精確度運算之每一者可在相同時脈週期數目中完成,不管上限溢位或下限溢位條件是否發生。
  3. 如申請專利範圍第2項之繪圖處理器,其中該倍精確度功能單元係進一步調適成於上限溢位或下限溢位條件確實發生情況中,產生一上限溢位或下限溢位結果,其遵循一浮點算術標準;及設定一輸出狀態旗標,表示上限溢位或下限溢位條件是否發生。
  4. 如申請專利範圍第1項之繪圖處理器,其中該倍精確 度功能單元係進一步調適,使得完成該複數個倍精確度運算之任一者所需的時間不受到一浮點異常的影響。
  5. 如申請專利範圍第1項之繪圖處理器,其中該複數個倍精確度運算更包括一倍精確度比較(DSET)操作,其執行一第一運算元與一第二運算元的比較測試,及產生布林結果,表示是否滿足該比較測試。
  6. 如申請專利範圍第1項之繪圖處理器,其中該複數個倍精確度運算更包括:一個倍精確度最大(DMAX)操作,其傳回兩個倍精確度輸入運算元之較大一者;及一個倍精確度最小(DMIN)操作,其傳回兩個倍精確度輸入運算元之較小一者。
  7. 如申請專利範圍第1項之繪圖處理器,其中該複數個倍精確度運算更包括至少一格式轉換操作,將一運算元從一個倍精確度格式轉換成一非倍精確度格式。
  8. 如申請專利範圍第1項之繪圖處理器,其中該複數個倍精確度運算更包括至少一格式轉換操作,將一運算元從一非倍精確度格式轉換成一倍精確度格式。
  9. 一種繪圖處理器,包含:一繪圖管線,其調適成產生影像資料,該繪圖管線包括一處理核心,其調適成執行複數個同時發生的執行緒;該處理核心包括一單精確度功能單元,其調適成執行一或多個單精確度運算元的算術運算;該處理核心更包括一個倍精確度融合乘加(DFMA)功能單元,其調適成執行一組倍精確度輸入運算元的融合乘加運算,並提供一個倍精確度結果,並對一對的倍精確度輸入運算元執行一加法運算且提供一倍精確度結果,並對一對的倍精確度輸入運算元執行一乘法運算且提供一倍精確度結果; 其中該DFMA功能單元包括一DFMA管線,其具有足夠資料路徑寬度,透過該DFMA管線,在單一通過中執行該融合乘加運算、該加法運算或該乘法運算,使得該融合乘加運算、該加法運算和該乘法運算之每一個均在相同時脈週期數目中完成。
  10. 如申請專利範圍第9項之繪圖處理器,其中該DFMA功能單元包括:一乘法器,其調適成在單循環中計算兩個倍精確度尾數的乘積;及一加法器,其調適成在單循環中計算兩個倍精確度尾數的加總。
  11. 如申請專利範圍第9項之繪圖處理器,其中:該融合乘加運算、該加法運算、與該乘法運算均在相同時脈週期數目內完成,不管一上限溢位或下限溢位條件是否發生。
  12. 如申請專利範圍第11項之繪圖處理器,其中該DFMA功能單元進一步組態成於上限溢位或下限溢位條件發生情況中,產生一上限溢位或下限溢位結果,其遵循一浮點算術標準;及設定一輸出狀態旗標,表示上限溢位或下限溢位條件是否發生。
  13. 如申請專利範圍第9項之繪圖處理器,其中該處理核心包括一單精確度功能單元的副本數目(P ),其調適成平行操作;及DFMA功能單元的副本數目(N )。
  14. 如申請專利範圍第13項之繪圖處理器,其中該數目P 係大於數目N
  15. 如申請專利範圍第14項之繪圖處理器,其中該數目N 是1。
  16. 如申請專利範圍第15項之繪圖處理器,其中該處理核心更包括一輸入管理器電路,其調適成收集該DFMA功能單元的N 組倍精確度輸入運算元,並在不同時脈週 期上,傳遞該N 組倍精確度運算元之不同一些者至DFMA功能單元。
  17. 如申請專利範圍第16項之繪圖處理器,其中該輸入管理器電路進一步調適成收集該單精確度功能單元的P組單精確度輸入運算元,並平行傳遞該P組單精確度運算元之不同一者至該單精確度功能單元的P副本之每一者。
TW097147390A 2007-12-07 2008-12-05 繪圖處理器 TWI402766B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/952,858 US8106914B2 (en) 2007-12-07 2007-12-07 Fused multiply-add functional unit

Publications (2)

Publication Number Publication Date
TW200937341A TW200937341A (en) 2009-09-01
TWI402766B true TWI402766B (zh) 2013-07-21

Family

ID=40230776

Family Applications (1)

Application Number Title Priority Date Filing Date
TW097147390A TWI402766B (zh) 2007-12-07 2008-12-05 繪圖處理器

Country Status (7)

Country Link
US (1) US8106914B2 (zh)
JP (2) JP2009140491A (zh)
KR (1) KR101009095B1 (zh)
CN (1) CN101452571B (zh)
DE (1) DE102008059371B9 (zh)
GB (1) GB2455401B (zh)
TW (1) TWI402766B (zh)

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190669B1 (en) 2004-10-20 2012-05-29 Nvidia Corporation Multipurpose arithmetic functional unit
US8037119B1 (en) 2006-02-21 2011-10-11 Nvidia Corporation Multipurpose functional unit with single-precision and double-precision operations
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US8477143B2 (en) 2008-03-04 2013-07-02 Apple Inc. Buffers for display acceleration
US8289333B2 (en) * 2008-03-04 2012-10-16 Apple Inc. Multi-context graphics processing
US8633936B2 (en) * 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US8239441B2 (en) * 2008-05-15 2012-08-07 Oracle America, Inc. Leading zero estimation modification for unfused rounding catastrophic cancellation
US20100125621A1 (en) * 2008-11-20 2010-05-20 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US8495121B2 (en) * 2008-11-20 2013-07-23 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
KR101511273B1 (ko) * 2008-12-29 2015-04-10 삼성전자주식회사 멀티 코어 프로세서를 이용한 3차원 그래픽 렌더링 방법 및시스템
US8803897B2 (en) * 2009-09-03 2014-08-12 Advanced Micro Devices, Inc. Internal, processing-unit memory for general-purpose use
US8990282B2 (en) * 2009-09-21 2015-03-24 Arm Limited Apparatus and method for performing fused multiply add floating point operation
US8745111B2 (en) 2010-11-16 2014-06-03 Apple Inc. Methods and apparatuses for converting floating point representations
KR101735677B1 (ko) 2010-11-17 2017-05-16 삼성전자주식회사 부동 소수점의 복합 연산장치 및 그 연산방법
US8752064B2 (en) * 2010-12-14 2014-06-10 Advanced Micro Devices, Inc. Optimizing communication of system call requests
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
DE102011108754A1 (de) * 2011-07-28 2013-01-31 Khs Gmbh Inspektionseinheit
CN102750663A (zh) * 2011-08-26 2012-10-24 新奥特(北京)视频技术有限公司 一种基于gpu的地理信息数据处理的方法、设备和系统
US9792087B2 (en) * 2012-04-20 2017-10-17 Futurewei Technologies, Inc. System and method for a floating-point format for digital signal processors
US9110713B2 (en) 2012-08-30 2015-08-18 Qualcomm Incorporated Microarchitecture for floating point fused multiply-add with exponent scaling
US9152382B2 (en) * 2012-10-31 2015-10-06 Intel Corporation Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values
US9665973B2 (en) * 2012-11-20 2017-05-30 Intel Corporation Depth buffering
US9019284B2 (en) 2012-12-20 2015-04-28 Nvidia Corporation Input output connector for accessing graphics fixed function units in a software-defined pipeline and a method of operating a pipeline
US9123128B2 (en) 2012-12-21 2015-09-01 Nvidia Corporation Graphics processing unit employing a standard processing unit and a method of constructing a graphics processing unit
US9317251B2 (en) 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations
GB2511314A (en) 2013-02-27 2014-09-03 Ibm Fast fused-multiply-add pipeline
US9389871B2 (en) 2013-03-15 2016-07-12 Intel Corporation Combined floating point multiplier adder with intermediate rounding logic
US9465578B2 (en) * 2013-12-13 2016-10-11 Nvidia Corporation Logic circuitry configurable to perform 32-bit or dual 16-bit floating-point operations
US10297001B2 (en) * 2014-12-26 2019-05-21 Intel Corporation Reduced power implementation of computer instructions
KR102276910B1 (ko) 2015-01-06 2021-07-13 삼성전자주식회사 테셀레이션 장치 및 방법
US9817791B2 (en) * 2015-04-04 2017-11-14 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word
US9952865B2 (en) 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US11847427B2 (en) 2015-04-04 2023-12-19 Texas Instruments Incorporated Load store circuit with dedicated single or dual bit shift circuit and opcodes for low power accelerator processor
US10152310B2 (en) * 2015-05-27 2018-12-11 Nvidia Corporation Fusing a sequence of operations through subdividing
US10503474B2 (en) 2015-12-31 2019-12-10 Texas Instruments Incorporated Methods and instructions for 32-bit arithmetic support using 16-bit multiply and 32-bit addition
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10282169B2 (en) 2016-04-06 2019-05-07 Apple Inc. Floating-point multiply-add with down-conversion
US10157059B2 (en) * 2016-09-29 2018-12-18 Intel Corporation Instruction and logic for early underflow detection and rounder bypass
US10401412B2 (en) 2016-12-16 2019-09-03 Texas Instruments Incorporated Line fault signature analysis
US10275391B2 (en) 2017-01-23 2019-04-30 International Business Machines Corporation Combining of several execution units to compute a single wide scalar result
GB2560766B (en) * 2017-03-24 2019-04-03 Imagination Tech Ltd Floating point to fixed point conversion
US10417731B2 (en) * 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10409614B2 (en) * 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10489877B2 (en) 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN108595369B (zh) * 2018-04-28 2020-08-25 天津芯海创科技有限公司 算式并行计算装置及方法
US10635439B2 (en) * 2018-06-13 2020-04-28 Samsung Electronics Co., Ltd. Efficient interface and transport mechanism for binding bindless shader programs to run-time specified graphics pipeline configurations and objects
CN108958705B (zh) * 2018-06-26 2021-11-12 飞腾信息技术有限公司 一种支持混合数据类型的浮点融合乘加器及其应用方法
US11093579B2 (en) * 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11455766B2 (en) * 2018-09-18 2022-09-27 Advanced Micro Devices, Inc. Variable precision computing system
JP7115211B2 (ja) * 2018-10-18 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
EP3974968B1 (en) 2019-03-15 2024-09-04 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190796A1 (en) 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
CN112905240A (zh) 2019-03-15 2021-06-04 英特尔公司 用于脉动阵列上的块稀疏操作的架构
US10990389B2 (en) * 2019-04-29 2021-04-27 Micron Technology, Inc. Bit string operations using a computing tile
US11016765B2 (en) * 2019-04-29 2021-05-25 Micron Technology, Inc. Bit string operations using a computing tile
US11907713B2 (en) * 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US12020349B2 (en) * 2020-05-01 2024-06-25 Samsung Electronics Co., Ltd. Methods and apparatus for efficient blending in a graphics pipeline
CN111610955B (zh) * 2020-06-28 2022-06-03 中国人民解放军国防科技大学 一种数据饱和加打包处理部件、芯片及设备
EP4248305A1 (en) 2020-11-19 2023-09-27 Google LLC Systolic array cells with output post-processing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4972362A (en) * 1988-06-17 1990-11-20 Bipolar Integrated Technology, Inc. Method and apparatus for implementing binary multiplication using booth type multiplication
US5487022A (en) * 1994-03-08 1996-01-23 Texas Instruments Incorporated Normalization method for floating point numbers
US6061781A (en) * 1998-07-01 2000-05-09 Ip First Llc Concurrent execution of divide microinstructions in floating point unit and overflow detection microinstructions in integer unit for integer divide
US20050235134A1 (en) * 2002-08-07 2005-10-20 Mmagix Technology Limited Apparatus, method and system for a synchronicity independent, resource delegating, power and instruction optimizing processor

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5241638A (en) * 1985-08-12 1993-08-31 Ceridian Corporation Dual cache memory
JPS6297060A (ja) * 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US4893268A (en) * 1988-04-15 1990-01-09 Motorola, Inc. Circuit and method for accumulating partial products of a single, double or mixed precision multiplication
US5287511A (en) * 1988-07-11 1994-02-15 Star Semiconductor Corporation Architectures and methods for dividing processing tasks into tasks for a programmable real time signal processor and tasks for a decision making microprocessor interfacing therewith
US4969118A (en) * 1989-01-13 1990-11-06 International Business Machines Corporation Floating point unit for calculating A=XY+Z having simultaneous multiply and add
JPH0378083A (ja) * 1989-08-21 1991-04-03 Hitachi Ltd 倍精度演算方式及び積和演算装置
JPH03100723A (ja) * 1989-09-13 1991-04-25 Fujitsu Ltd 精度変換命令の処理方式
US5241636A (en) * 1990-02-14 1993-08-31 Intel Corporation Method for parallel instruction execution in a computer
US5068816A (en) * 1990-02-16 1991-11-26 Noetzel Andrew S Interplating memory function evaluation
DE69129569T2 (de) * 1990-09-05 1999-02-04 Philips Electronics N.V., Eindhoven Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen
JPH0612229A (ja) * 1992-06-10 1994-01-21 Nec Corp 乗累算回路
EP0576262B1 (en) * 1992-06-25 2000-08-23 Canon Kabushiki Kaisha Apparatus for multiplying integers of many figures
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
JPH0659862A (ja) * 1992-08-05 1994-03-04 Fujitsu Ltd 乗算器
EP0622727A1 (en) * 1993-04-29 1994-11-02 International Business Machines Corporation System for optimizing argument reduction
EP0645699A1 (en) * 1993-09-29 1995-03-29 International Business Machines Corporation Fast multiply-add instruction sequence in a pipeline floating-point processor
US5673407A (en) * 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
US5553015A (en) 1994-04-15 1996-09-03 International Business Machines Corporation Efficient floating point overflow and underflow detection system
US5734874A (en) * 1994-04-29 1998-03-31 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
JP3493064B2 (ja) 1994-09-14 2004-02-03 株式会社東芝 バレルシフタ
US5548545A (en) * 1995-01-19 1996-08-20 Exponential Technology, Inc. Floating point exception prediction for compound operations and variable precision using an intermediate exponent bus
US5701405A (en) * 1995-06-21 1997-12-23 Apple Computer, Inc. Method and apparatus for directly evaluating a parameter interpolation function used in rendering images in a graphics system that uses screen partitioning
US5778247A (en) 1996-03-06 1998-07-07 Sun Microsystems, Inc. Multi-pipeline microprocessor with data precision mode indicator
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
JP2000081966A (ja) * 1998-07-09 2000-03-21 Matsushita Electric Ind Co Ltd 演算装置
JP3600026B2 (ja) * 1998-08-12 2004-12-08 株式会社東芝 浮動小数点演算器
US6317133B1 (en) * 1998-09-18 2001-11-13 Ati Technologies, Inc. Graphics processor with variable performance characteristics
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
JP2000293494A (ja) * 1999-04-09 2000-10-20 Fuji Xerox Co Ltd 並列計算装置および並列計算方法
JP2001236206A (ja) * 1999-10-01 2001-08-31 Hitachi Ltd データのロード方法及びその記憶方法、データワードのロード方法及びその記憶方法、並びに、浮動小数点数の比較方法
US6198488B1 (en) * 1999-12-06 2001-03-06 Nvidia Transform, lighting and rasterization system embodied on a single semiconductor platform
US6807620B1 (en) * 2000-02-11 2004-10-19 Sony Computer Entertainment Inc. Game system with graphics processor
US6557022B1 (en) * 2000-02-26 2003-04-29 Qualcomm, Incorporated Digital signal processor with coupled multiply-accumulate units
US6912557B1 (en) * 2000-06-09 2005-06-28 Cirrus Logic, Inc. Math coprocessor
JP2002008060A (ja) * 2000-06-23 2002-01-11 Hitachi Ltd データ処理方法、記録媒体及びデータ処理装置
US6976043B2 (en) * 2001-07-30 2005-12-13 Ati Technologies Inc. Technique for approximating functions based on lagrange polynomials
JP3845009B2 (ja) * 2001-12-28 2006-11-15 富士通株式会社 積和演算装置、及び積和演算方法
JP2003223316A (ja) 2002-01-31 2003-08-08 Matsushita Electric Ind Co Ltd 演算処理装置
US8549501B2 (en) * 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
US7437538B1 (en) * 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7640285B1 (en) * 2004-10-20 2009-12-29 Nvidia Corporation Multipurpose arithmetic functional unit
WO2006053173A2 (en) * 2004-11-10 2006-05-18 Nvidia Corporation Multipurpose multiply-add functional unit
KR20060044124A (ko) * 2004-11-11 2006-05-16 삼성전자주식회사 3차원 그래픽 가속을 위한 그래픽 시스템 및 메모리 장치
JP4571903B2 (ja) * 2005-12-02 2010-10-27 富士通株式会社 演算処理装置,情報処理装置,及び演算処理方法
US7747842B1 (en) * 2005-12-19 2010-06-29 Nvidia Corporation Configurable output buffer ganging for a parallel processor
US7728841B1 (en) 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
JP4482052B2 (ja) * 2006-02-14 2010-06-16 富士通株式会社 演算装置および演算方法
US7484076B1 (en) * 2006-09-18 2009-01-27 Nvidia Corporation Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q<P)
US7617384B1 (en) * 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
JP4954799B2 (ja) 2007-06-05 2012-06-20 日本発條株式会社 衝撃吸収装置
US8775777B2 (en) * 2007-08-15 2014-07-08 Nvidia Corporation Techniques for sourcing immediate values from a VLIW
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4972362A (en) * 1988-06-17 1990-11-20 Bipolar Integrated Technology, Inc. Method and apparatus for implementing binary multiplication using booth type multiplication
US5487022A (en) * 1994-03-08 1996-01-23 Texas Instruments Incorporated Normalization method for floating point numbers
US6061781A (en) * 1998-07-01 2000-05-09 Ip First Llc Concurrent execution of divide microinstructions in floating point unit and overflow detection microinstructions in integer unit for integer divide
US20050235134A1 (en) * 2002-08-07 2005-10-20 Mmagix Technology Limited Apparatus, method and system for a synchronicity independent, resource delegating, power and instruction optimizing processor

Also Published As

Publication number Publication date
TW200937341A (en) 2009-09-01
CN101452571B (zh) 2012-04-25
GB0821495D0 (en) 2008-12-31
GB2455401B (en) 2010-05-05
JP2009140491A (ja) 2009-06-25
US8106914B2 (en) 2012-01-31
KR20090060207A (ko) 2009-06-11
DE102008059371B4 (de) 2012-03-08
GB2455401A (en) 2009-06-10
JP2012084142A (ja) 2012-04-26
KR101009095B1 (ko) 2011-01-18
US20090150654A1 (en) 2009-06-11
DE102008059371B9 (de) 2012-06-06
CN101452571A (zh) 2009-06-10
DE102008059371A1 (de) 2009-06-25

Similar Documents

Publication Publication Date Title
TWI402766B (zh) 繪圖處理器
US11797303B2 (en) Generalized acceleration of matrix multiply accumulate operations
US11816482B2 (en) Generalized acceleration of matrix multiply accumulate operations
US7225323B2 (en) Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
US7428566B2 (en) Multipurpose functional unit with multiply-add and format conversion pipeline
US8037119B1 (en) Multipurpose functional unit with single-precision and double-precision operations
KR101515311B1 (ko) 승산-승산-누산 명령 수행
RU2263947C2 (ru) Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных
US20060101244A1 (en) Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US8051123B1 (en) Multipurpose functional unit with double-precision and filtering operations
US8190669B1 (en) Multipurpose arithmetic functional unit
KR100911786B1 (ko) 다목적 승산-가산 기능 유닛
US7240184B2 (en) Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations
EP1163591A1 (en) Processor having a compare extension of an instruction set architecture
WO2000048080A9 (en) Processor having a compare extension of an instruction set architecture
JP2001075779A (ja) 演算装置及び演算制御方法