因為在OpenGL2.0之前,OpenGL基本的設計是作為固定功能狀態機器,所以要修改OpenGL的唯一方法是對它定義擴充。這樣,在各種OpenGL實現中,要通過擴充的形式來暴露新的功能,從而有了大量可用的擴充。OpenGL有一個定義良好的擴充機制,並且硬體製造商可以自由地定義並實現新硬體功能的特徵。但由於只有OpenGL實現者才能實現才能實現擴充,因此就無法預先為應用程式擴充此OpenGL功能,直到OpenGL供應商提供了擴充的實現。 到目前為止,已經有超過400個OpenGL擴充了。只被一家
R700程式由控制流程(CF)、ALU(譯者註:算數邏輯單位)、取紋理和取頂點指令組成。ALU可以具有多達三個源運算元和一個目的運算元。指令對32位或64位IEEE浮點值以及帶符號或無符號整型進行操作。某些指令的執行致使斷言(predicate)位被寫,從而影響後面的指令。圖形程式一般使用取頂點和取紋理指令來載入資料;而通用計算應用一般使用取紋理指令來載入資料。 2.1
本小節描述了支援雙核和四核技術的Intel
一個控制流程(CF)程式是一個主程式。它通過使用控制流程指令(帶條件的跳轉、迴圈、以及子常式)指引程式子句流,並且它可以包括儲存空間分配指令和其它指定頂點和幾何程式什麼時候已經完成它們操作的指令。R700硬體維護一單個多條目棧,用於儲存和恢複活動掩膜、迴圈計數器、以及子常式的返回地址。 CF指令可以:1、執行一個ALU、取紋理或取頂點子句,局部資料共用子句,或儲存空間讀子句。這些操作擷取子句執行的地址,以及指示子句大小的一個計數。一個程式可以指定,一個子句必須等待,直到先前被執行的子句完成;或一
目前很多開源基於x86處理器環境的C/C++,Objective-C/C++編譯器所帶的彙編器使用AT&T格式。AT&T彙編針對x86指令集與其它處理器(比如ARM、Blackfin等)有所不同,它與Intel自訂的彙編格式有比較大的偏差。GCC的彙編器能支援Intel文法特性,可以參考我前面的博文來獲悉如何使用。不過對於最新的LLVM2.0,又開始棄用Intel文法特性了。因此不管怎麼說瞭解AT&T彙編文法還是有些好處的,呵呵。 首先,AT&T彙編在對於儲存空間
這一章描述了Intel 64和IA-32處理器中的儲存空間Cache(譯者註:C大寫為名詞)以及Cache控制機制、TLB、以及儲存緩衝。它也描述了在P6家族處理器中引入的儲存空間類型範圍寄存器以及它們如何被用於控制實體儲存體器位置的cache(譯者註:c小寫作為動詞使用,意思為快存,Cache映射)。 11.1 內部Cache、TLB和緩衝 11.2 Cache術語 IA-32處理器(起始於奔騰處理器)和Intel
對於有一定作業系統基礎的朋友看到“搶佔式”調度一定不會陌生吧。 我參考了Linux核心、eCos以及Windows核心對於搶佔式調度的處理,感覺雖然細節上有點差別,但都挺有意思。 這裡,我想談談關於搶佔式調度的一些看法。在很多作業系統書上基本上都這麼談基於優先順序的搶佔式調度:(1) 每個任務賦予唯一的一個優先順序(有些作業系統可以動態地改變任務的優先順序);(2) 假如有幾個任務同時處於就緒狀態,優先順序最高的那個將被運行;(3)
整體的問題整體辦——ARP病毒的優勢、軟肋 這事還得說到好幾天前,自從搬機房之後一直持續好長一段時間不能上網,經過勘察,發現時交換器有問題,於是換了一個交換器。這下可以上網了吧,結果依然不樂觀,可以上了,但是只能是偶爾,偶爾運氣好(歸結到“運氣”是一個相當錯誤的看法)極個別的同學可以上得去網,但是網速超慢,並且經常掉線。 在區域網路內上過網或是管理過區域網路的人應該都知道這很可能是ARP病毒攻擊的現象。經過再次勘察,果然就是,區域網路內ARP資料包發送量嚴重的多。
在一個多線程環境中,可能會有某些硬體資源在硬體拓撲的某一層,在物理上被共用。在多處理器系統中,一般,匯流排和儲存空間子系統在多個插槽之間在物理上被共用。在一個硬體多線程效能處理器內,某些資源為每個處理器核心而提供,而其它資源可以為每個邏輯處理器而提供(見8.7小節和8.8小節)。從軟體編程角度,處理器操作的控制傳輸以邏輯處理器的粒度被管理(作業系統通過在平台上分配一個可用的邏輯處理器指派一個可啟動並執行任務)。為了管理在一個多線程環境中的共用資源的拓撲,理解並管理被多個邏輯處理器共用的資源對於軟
Intel 64和IA-32架構支援Cache、翻譯後備緩衝(TLB)以及一個用於指令和資料的臨時片上(和外部)儲存的儲存緩衝。(圖11-1展示了奔騰4和Intel至強處理器的Cache、TLB和儲存緩衝的安排)。表11-1展示了為奔騰4、Intel至強、P6家族、和奔騰處理器的這些Cache和緩衝的特徵。這些單元的大小和特徵是機器特定的,並且在處理器的未來版本中可能會變。CPUID指令返回Cache和緩衝的大小和特徵。 Intel
R700家族處理器實現了一個並行微架構,不僅僅為計算圖形應用,而且也為通用目的流應用提供了卓越的平台。任何可以被映射到一個2D矩陣的資料密集應用可作為運行在R700家族處理器上的候選。圖1.1展示了R700家族處理器的整合塊圖它包括了一個資料平行處理器(DDP)陣列,一個命令處理器,一個儲存空間控制器,以及其它邏輯(沒有展示)。R700命令處理器讀取主機寫到系統儲存空間地址空間中的儲存空間映射R700寄存器。當命令完成時,該命令處理器將硬體產生的中斷髮送給主機。R700儲存空間控制器可以直接存取
表2.5到表2.8概括了可被一個在一個R700程式中的單個線程所訪問的R700程式狀態的程式員的視點。 表不包括:1、由R700硬體專門維護的狀態,諸如內部迴圈控制寄存器2、僅對主機軟體可訪問的狀態,諸如配置寄存器,或3、對許多執行線程的狀態的複製 表2.5到2.8中的列頭具有以下意思:1、被R700軟體訪問——被執行在R700處理器上的軟體,可讀(R),可寫(W),或可讀寫(R/W)。2、被主機軟體訪問——被執行在主機處理器上的軟體,可讀(R),可寫(W),或可讀寫(R/W)。表並不包括狀態物
處理器允許系統儲存空間的任一地區被cache在L1、L2、L3 Cache中。在系統儲存空間單獨的頁或地區中,它允許cache類型(也稱為儲存空間類型)被指定(見11.5小節)。當前為Intel 64和IA-32架構所定義的儲存空間類型為:(見表11-2) 1、強不可被cache的(UC)——系統儲存空間位置不被cache。所有出現在系統匯流排上的讀寫以程式次序,不帶無序被執行。沒有投機的儲存空間訪問、頁表遍曆、或投機目標分支的預取。這種類型的Cache控制對於儲存空間映射的I/O裝置是有用的。
在OpenCL中,用__local(或local)修飾的變數會被存放在一個計算單元(Compute Unit)的共用儲存空間地區中。對於nVidia的GPU,一個CU可以被映射為物理上的一塊SM(Stream Multiprocessor);而對於AMD-ATi的GPU可以被映射為物理上的一塊SIMD。不管是SM也好,SIMD也罷,它們都有一個在本計算單元中被所有線程(OpenCL中稱為Work Item)所共用的共用儲存空間。因此,在一個計算單元內,可以通過local shared
當在一個MP系統中的一個邏輯處理器(包括多核處理器或支援Intel超執行緒技術的處理器)處於空閑(沒有工作可做)或阻塞(等待一個鎖或訊號量)時,核心執行引擎資源的額外的管理可以通過使用HLT(中止)、PAUSE或MONITOR/MWAIT指令來完成。 8.10.1
R700家族的流處理器可以在不同執行線程之間共用資料。資料共用可以顯著地提升效能。圖2.1展示了對每個線程可用的儲存空間層級。 (譯者對圖的一些注釋:在一個SIMD中,圖上標有Processor 0到Processor 63;而在物理上,一個SIMD只有16個流處理器(Streaming Processor),因此這裡的Processor 0到Processor
在GCC以及LLVM編譯器中,預設情況下,如果使用彙編或在C/C++,Objective C/C++中內嵌彙編的話都是AT&T格式。儘管本人接觸GCC已經很久了,但對於AT&T彙編還是不忒習慣,尤其是寫SSE的時候很彆扭,呵呵。因此如果能寫Intel格式彙編的話就會非常舒服。下面提供此方法——(註:此方法已經在Apple LLVM1.6編譯器下成功通過)int main(int argc, const char * argv[]){ __asm__
在OpenCL或CUDA中,對全域共用變數的訪問我們往往會忽略掉使用volatile,這在僅對其訪問一次的時候不會有問題,但是對這個共用變數變數做第二次訪問的話,那麼它會被編譯器最佳化,從而得到的一直是第一次被引用時的值。也就是說,其它線程對共用變數的修改,當前線程將不可見。下面舉一個OpenCL的簡單的例子來描述這一情況:__kernel void solve_sum( __global unsigned buffer[512],
Intel 64和IA-32架構提供了各種用於控制資料和指令的cache的機制,以及為控制在處理器、Cache和儲存空間之間讀寫次序的機制。這些機制可以被劃分為兩組: 1、Cache控制寄存器和位元——Intel 64和IA-32架構定義了控制寄存器內的若干個專用寄存器和各個位,以及控制L1、L2和L3 Cache中的cache系統儲存空間位置的頁和目錄表條目。這些機制控制了實體儲存體器地區的虛擬儲存空間頁的cache。 2、Cache控制和儲存空間次序指令——Intel
Intel x87 FPU專門用於執行標量浮點計算,可以對單精確度浮點(32位)、雙精確度浮點(64位)以及擴充雙精確度浮點(80位)進行計算,並順從IEEE754標準。 x87 FPU可以工作在32位相容模式下以及64位元模式下,在這兩種下,FPU的資料寄存器的個數都一樣,只有8個。對x87 FPU的資料寄存器的訪問方式與一般的寄存器有所不同,它是棧式訪問。你通過FLD指令把外部資料搬到x87 FPU的資料寄存器中時,那麼x87