久久国产av,国产激情欧美有码,亚洲国产综合精品2020,国产无套粉嫩白浆内精

渲染模式directx和opengl區(qū)別,directx和opengl哪個渲染好 “心臟”

2023-05-04 01:05:19 生財有道 3556次閱讀 投稿:若邁風

渲染模式directx和opengl區(qū)別,directx和opengl哪個渲染好 “心臟”

渲染模式directx和opengl區(qū)別,directx和opengl哪個渲染好?很多人不了解,今天各百科為大家?guī)硐嚓P內容,下文是小編給大家?guī)淼慕榻B。

GPU的英文名稱是Graphic Processing Unit,GPU的中文名稱是computer graphics processor,是NVIDIA在1999年提出的。

一、GPU概述

GPU的概念也是相對于計算機系統(tǒng)中的CPU而言的。隨著人們對圖形的需求越來越大,尤其是在家用系統(tǒng)和游戲發(fā)燒友中,而傳統(tǒng)的CPU已經不能滿足現(xiàn)狀,就需要提供一個專門處理圖形的核心處理器。

“心臟”作為GPU的硬件顯卡,相當于計算機系統(tǒng)中CPU的角色。同時,GPU也可以作為區(qū)分2D硬件顯卡和3D硬件顯卡的重要依據(jù)。硬件顯卡主要使用CPU處理功能和3D圖像,這就是所謂的"軟加速"。

3D硬件顯卡將特性和3D圖像處理能力集中到硬件顯卡中,也叫“硬件加速”。目前市面上流行的顯卡大多是NVIDIAATI.生產的

1.1.為什么需要專門的GPU來處理圖形工作?為什么CPU不行?

GPU是一種并行編程模式,與CPU的串行編程模式完全不同。導致CPU上很多優(yōu)秀的算法無法直接映射到GPU上,而GPU的結構相當于共享內存多處理結構,所以在GPU上設計的并行程序和CPU上的串行程序有很大的不同。GPU主要采用了一些重要的技術,比如立方體環(huán)境下的紋理映射,硬件TL,頂點混合,凹凸映射和紋理壓縮,雙紋理四像素256位渲染引擎。

由于圖形渲染任務的高度并行性,GPU只需增加并行處理單元和內存控制單元,就能有效提高處理能力和內存帶寬。

GPU和CPU的設計目的完全不同。CPU是為了處理一般任務而設計的,所以有復雜的控制單元,而GPU主要是用來處理計算性強但邏輯弱的計算任務。GPU中可用的處理單元可以用作更多的執(zhí)行單元。因此,在大量重復數(shù)據(jù)集操作和頻繁內存訪問的應用場景中,GPU相比CPU有著不可比擬的優(yōu)勢。

1.2.GPU怎么用?

GPU的使用方式有兩種,一種是開發(fā)的應用通過通用圖形庫接口調用GPU設備,另一種是GPU本身提供API編程接口,應用通過GPU提供的API編程接口直接調用GPU設備。

1.2.1、通用圖形庫

一般的圖形庫是用來使用GPU的,現(xiàn)有的圖形庫如OpenGL或Direct3D是用來編寫著色語言來控制GPU內部的著色器完成所需的計算。

目前業(yè)界公認的圖形編程接口主要有OpenGL和DirectX。OpenGL是目前開發(fā)交互式和便攜式2D和3D圖形應用程序的首選環(huán)境,也是圖形應用程序使用最廣泛的標準。它是OpenGL SGI公司開發(fā)的計算機圖形處理系統(tǒng),是圖形硬件的軟件接口。GL就是圖形庫,所以OpenGL應用不需要關注運行的操作系統(tǒng)和平臺。

只要遵循OpenGL標準的任何環(huán)境都會產生同樣的可視化效果。和OpenGL類似,DirectX (Directe Xtension)也是一個圖形API。它是微軟創(chuàng)建的多媒體編程接口,已經成為微軟Windows的標準。為了滿足GPU應用的需求,DirectX根據(jù)新的GPU功能的擴展和進度,及時定義新的版本,其提供的功能與GPU提供的功能幾乎同步。

1.2.2,GPU自帶的編程接口

GPU本身提供的編程接口主要由兩家提供GPU設備的公司提供,包括英偉達的CUDA框架和AMD(ATI)在2006年提出的CTM(接近金屬)框架(注意,ATI最早生產GPU設備,后被AMD收購)。AMD的CTM框架已經不再使用,主要是因為AMD(ATI)在2007年推出了ATI Stream SDK框架。2008年,AMD(ATI)完全轉向開放的OpenCL標準,所以AMD(ATI)目前沒有獨立私有的通用計算框架。

2007年,NVIDIA發(fā)布了CUDA(計算統(tǒng)一設備架構)專用通用計算框架。使用CUDA進行通用計算編程不再需要圖形API的幫助,而是以非常相似的方式使用C語言進行開發(fā)。在CUDA編程模型中,有一個稱為主機的CPU和幾個稱為設備或協(xié)處理器的GPU。

在這個模型中,CPU和GPU協(xié)同工作,各司其職。CPU負責邏輯事務處理和串行計算,GPU則專注于執(zhí)行線程化并行處理任務。CPU和GPU各有獨立的內存地址空間,主機端的內存和設備端的顯存。一般使用CUDA框架來編寫自己的大型應用程序,如石油勘探、流體動力學模擬、分子動力學模擬、生物計算、音視頻編解碼、天文計算等領域。

但是由于我們一般企業(yè)應用的開發(fā)成本和兼容性問題,大部分都是使用通用的圖形庫來開發(fā)和調用GPU設備。

1.3.GPU是如何工作的?

右GPU

于通用計算機和圖形處理的內部組件主要有兩部分: 頂點處理器(Vertex Processor)和子素處理器(Fragment Processor)。這種處理器具備流處理機的模式,即不具有大容量的快存/存儲器可以讀寫,只是直接在芯片上利用臨時寄存器進行流數(shù)據(jù)的操作。

  

當GPU 用于圖形處理時,此時GPU 內部的頂點渲染、像素渲染以及幾何渲染操作都可以通過流處理器完成。從圖中可以看出,此時GPU 內部的所有流處理器相當于一個多核的處理器,數(shù)據(jù)可以很方便地在不同的流處理器之間的輸入和輸出之間移動,同時GPU分派器和控制邏輯可以動態(tài)的指派流處理器進行相應的頂點,像素,幾何等操作,因為流處理器都是通用的。

二、GPU虛擬化

開始我們的正題,目前虛擬機系統(tǒng)中的圖形處理方式有三種:一種是采用虛擬顯卡的方式,另一種是直接采用物理顯卡,最后是采用GPU虛擬化。

2.1、虛擬顯卡

第一種采用虛擬顯卡是現(xiàn)在主流的虛擬化系統(tǒng)的選擇,因為專業(yè)的顯卡硬件價格不菲。目前采用虛擬顯卡的這些技術包括:

虛擬網絡計算機VNC (Virtual Network Computing)Xen 虛擬幀緩存VMware虛擬圖形顯示處理器GPU (Graphics Processing Unit)獨立于虛擬機管理器的圖形加速系統(tǒng)VMGL (VMM-Independent Graphics Acceleration)。VNC(Virtual Network Computing)基本上是屬于一種顯示系統(tǒng),也就是說它能將完整的窗口界面通過網絡,傳輸?shù)搅硪慌_計算機的屏幕上。Windows 服務器中包含的"Terminal Server"即是屬于這種原理的設計。VNC 是由AT&T 實驗室所開發(fā)的,其采用GPL(General Public License)授權條款,任何人都可免費取得該軟件。VNC軟件要由兩個部分組成:VNC server和VNC viewer。用戶需先將VNC server安裝在被遠程操控的計算機上后,才能在主控端執(zhí)行VNC viewer 進行遠程操控。

XEN虛擬幀緩存是指XEN提供的一個虛擬的顯示設備。該虛擬顯示設備采用特權域的VNC服務器,因此該虛擬顯示設備具有相似的VNC接口??蛻魴C在XEN虛擬幀緩存中寫入數(shù)據(jù),然后通過VNC 協(xié)議來傳輸已修改的圖片,最后通知前端進行相應區(qū)域的更新。這個虛擬幀緩存設備的源碼是來自開源的Qemu。我們在XenServer上看見虛擬機的操作系統(tǒng)桌面界面,即是這種技術的顯示。

虛擬網絡計算機VNC 和XEN 虛擬幀緩存這兩種模式至今在虛擬機中仍未提供一定的硬件圖形加速能力。由于目前仍沒有一個機制能使虛擬機進行訪問圖形硬件的能力,因此這些虛擬的顯示設備都是通過使用CPU以及內存的方式對圖形數(shù)據(jù)進行相應處理。并沒有采用物理顯示設備的功能。

然而VMGL這種模式已經實現(xiàn)了這種機制,這個機制通常被稱為前端-后端虛擬化機制(Front-end virtualization)。VMGL這種模式采用這個機制將需要圖形處理的數(shù)據(jù)發(fā)送到一個擁有硬件圖形加速功能的虛擬監(jiān)控機上進行相應的圖形數(shù)據(jù)處理。目前存在的比較主流可用于GPU應用程序開發(fā)的圖形處理接口有兩類:OpenGL和Direct3D。

在這兩類圖形處理接口中,OpenGL是唯一一類能夠在主流操作系統(tǒng)中跨平臺操作的圖形API接口。在虛擬機平臺中,VMGL是首個針對OpenGL API進行虛擬化的項目。VMGL的工作原理是,它在客戶端操作系統(tǒng)中部署了一個偽庫(Fake Library)用來取代標準的OpenGL 庫,偽庫(Fake Library)擁有與標準的OpenGL庫相同的接口,在客戶端操作系統(tǒng)中的偽庫也實現(xiàn)了指向遠程服務器的宿主機操作系統(tǒng)的遠程調用。

這樣一來,所有的本地OPENGL調用都將被解釋為對遠程服務器的一次服務請求,遠程服務器的宿主機操作系統(tǒng)擁有真正的OPENGL庫、顯卡驅動和物理硬件GPU,它負責完成OPENGL請求并將執(zhí)行結果顯示到屏幕上。由于VMGL在整個過程操作中都是完全透明的,因此調用OPENGL的應用程序不需要修改源代碼也不需要進行二進制改寫,無需為虛擬機平臺作任何改動。

2.2、顯卡直通

顯卡直通也叫做顯卡穿透(Pass-Through),是指繞過虛擬機管理系統(tǒng),將GPU 單獨分配給某一虛擬機,只有該虛擬機擁有使用GPU的權限,這種獨占設備的方法分配方式保存了GPU的完整性和獨立性,在性能方面與非虛擬化條件下接近,且可以用來進行通用計算。但是顯卡直通需要利用顯卡的一些特殊細節(jié),同時兼容性差,僅在部分GPU 中設備可以使用。

Xen 4.0增加了VGA Passthrough技術,因此XenServer也擁有了該技術,XenServer的Passthrough 就是利用英特爾設備虛擬化(Intel VT-d)技術將顯示設備暴露給某一個客戶虛擬機,不僅其它客戶虛擬機不能訪問,就連宿主虛擬機也失去了使用該GPU的能力。它在客戶虛擬機中實現(xiàn)了顯卡的一些特殊細節(jié),如VGA BIOS、文本模式、IO 端口、內存映射、VESA模式等,以支持直接訪問。使用Xen Server的 VGA Pass-Through 技術的GPU執(zhí)行效率高,功能全,但只能被單一系統(tǒng)獨占使用,失去了設備復用的功能。VMware ESXi 中包括一個VM Direct Path I/O框架,使用該技術也可以將我們的顯卡設備直通給某一虛擬機進行使用。

XenServer和VMware使用的是不同的技術但是實現(xiàn)的效果都是一樣的,即將物理顯卡設備直通給其中的某一虛擬機使用,以達到虛擬機進行3D顯示和渲染的效果。

由于顯卡直通實際上是由客戶操作系統(tǒng)使用原生驅動和硬件,缺少必要的中間層來跟蹤和維護GPU 狀態(tài),它不支持實時遷移等虛擬機高級特性。如XenServer Passthrough禁止執(zhí)行Save/Restore/Migration 等操作。VMware的虛擬機中,一旦開啟VMDirectPath I/O功能,其對應的虛擬機將失去執(zhí)行掛起/恢復、實時遷移的能力。

2.3、顯卡虛擬化(GPU虛擬化)

顯卡虛擬化就是將顯卡進行切片,并將這些顯卡時間片分配給虛擬機使用的過程。由于支持顯卡虛擬化的顯卡一般可以根據(jù)需要切分成不同的規(guī)格的時間片,因此可以分配給多臺虛擬機使用。其實現(xiàn)原理其實就是利用應用層接口虛擬化(API remoting),API重定向是指在應用層進行攔截與GPU相關的應用程序編程接口(API),通過重定向(仍然使用GPU)的方式完成相應功能,再將執(zhí)行結果返回應用程序。

我們現(xiàn)在使用Citrix的3D桌面虛擬化解決方案中,大部分是使用NVIDIA公司提供的顯卡虛擬化技術,即是vCUDA(virtual CUDA)技術,前面我們說過了CUDA框架,再此不在說明。vCUDA采用在用戶層攔截和重定向CUDA API的方法,在虛擬機中建立物理GPU的邏輯映像――虛擬GPU,實現(xiàn)GPU資源的細粒度劃分、重組和再利用,支持多機并發(fā)、掛起恢復等虛擬機高級特性。

其vCUDA的實現(xiàn)原理大概包括三個模塊:CUDA客戶端、CUDA服務端和CUDA管理端。以XenServer為例,在物理硬件資源上運行著一個VMM用于向上提供硬件映像,在VMM上運行著若干個虛擬機。其中一個虛擬機為特權虛擬機(Host VM),即為XenServer中的Domain 0,在虛擬機中運行的操作系統(tǒng)稱為Host OS。

Host OS能夠直接控制硬件,系統(tǒng)內安裝著原生的CUDA庫以及GPU驅動,使得Host OS可以直接訪問GPU和使用CUDA。其它的虛擬機屬于非特權虛擬機(Guest VM),其上運行的操作系統(tǒng)(Guest OS)不能直接操縱GPU。在這里我們將CUDA客戶端稱之為客戶端驅動,CUDA服務端稱之為宿主機的驅動,CUDA管理端稱之為GPU管理器。

2.3.1、客戶端

客戶端驅動其實質就是我們安裝在虛擬機比如Windows 7上的顯卡驅動程序。主要的功能是在用戶層提供針對CUDA API的庫以及一個維護CUDA相關軟硬件狀態(tài)的虛擬GPU(vGPU)??蛻舳蓑寗又苯用嫦駽UDA應用程序,其作用包括:

1)攔截應用程序中CUDA API調用;2)選擇通信策略,為虛擬化提供更高層語義的支持;3)對調用的接口和參數(shù)進行封裝、編碼;4)對服務端返回的數(shù)據(jù)進行解碼,并返回給應用。此外,客戶端驅動在第一個API調用到來之前,首先到管理端索取GPU資源。每一個獨立的調用過程都必須到宿主管理端驅動申請資源,以實現(xiàn)對GPU資源和任務的實時調度。

此外,客戶端驅動同時設置了vGPU用來維護與顯卡相關的軟硬件狀態(tài)。vGPU本身實質上僅僅是一個鍵值對的數(shù)據(jù)結構,在其中存儲了當前使用的地址空間、顯存對象、內存對象等,同時記錄了API的調用次序。當計算結果返回時,客戶端驅動會根據(jù)結果更新vGPU。

2.3.2、服務器端

服務端組件位于特權虛擬機(XenServer術語:特權域)中的應用層。特權虛擬機可以直接與硬件交互,因此服務端組件可以直接操縱物理GPU來完成通用計算任務。

服務端面向真實GPU,其作用包括:

1)接收客戶端的數(shù)據(jù)報,并解析出調用和參數(shù);2)對調用和參數(shù)進行審核;3)利用CUDA和物理GPU計算審核通過的調用;4)將結果編碼,并返回給客戶端;5)對計算系統(tǒng)中支持CUDA的GPU進行管理。此外,服務端運行的第一個任務是將自身支持CUDA的GPU設備的信息注冊到管理端中。服務端應對客戶端的請求時,為每個應用分配獨立的服務線程。服務端統(tǒng)一管理本地GPU資源,按照一定的策略提供GPU資源,并將由于API調用修改的相關軟硬件狀態(tài)更新至vGPU。

2.3.3、管理端

管理端組件位于特權域,在實現(xiàn)CUDA編程接口虛擬化的基礎上,將GPU強大的計算能力和計算資源在更高的邏輯層次上進行隔離、劃分、調度。在CUDA服務端使用計算線程和工作線程在一定程度上使同在一個物理機上的GPU間負載均衡,設置CUDA管理端組件在更高的邏輯層次上進行負載均衡,使在同一個GPU虛擬集群中的GPU負載均衡。

管理端組件調度的原則是盡量使在同一個物理機上的GPU需求自給,如果該物理機上具備滿足條件的GPU資源,在一般情況下,該物理機上的虛擬機的GPU需求都重定向到該物理機的CUDA服務端。

管理端對GPU資源進行統(tǒng)一管理,采用集中、靈活的機制,實現(xiàn):

1)動態(tài)調度:當用戶所占資源空閑時間超過一定閾值或者任務結束時,管理端回收該資源,當該用戶再次發(fā)布計算任務時,重新為其任務分配GPU資源;2)負載平衡:當局部計算壓力過大時,調整計算負載,通過動態(tài)調度時選擇合適的GPU資源來分散計算負載;3)故障恢復:當出現(xiàn)故障時,將任務轉移到新的可用GPU資源上。

聲明:各百科所有作品(圖文、音視頻)均由用戶自行上傳分享,僅供網友學習交流。若您的權利被侵害,請聯(lián)系: [email protected]