BrookGPU
Utvecklare | Stanford University |
---|---|
Stabil frisättning | v0.5 Beta 1 / 2007 |
Förvar | |
Operativ system | Linux , Windows |
Typ | Kompilator/körtid |
Licens | BSD-licens (delar är under GPL ) |
Hemsida | http://graphics.stanford.edu/projects/brookgpu/ |
Programmeringsspråket Brook och dess implementering BrookGPU var tidiga och inflytelserika försök att möjliggöra allmän beräkning av grafikprocessorer . Brook, utvecklad vid Stanford Universitys grafikgrupp, var en kompilator och runtime-implementering av ett strömprogrammeringsspråk riktat mot moderna, mycket parallella GPU :er som de som finns på ATI- eller Nvidia -grafikkort.
BrookGPU kompilerade program skrivna med programmeringsspråket Brook stream, som är en variant av ANSI C . Den kunde rikta in sig på OpenGL v1.3+, DirectX v9+ eller AMD:s Close to Metal för beräkningsbackend och kördes på både Microsoft Windows och Linux . För felsökning kan BrookGPU också simulera ett virtuellt grafikkort på processorn.
Status
Den senaste större betaversionen (v0.4) var i oktober 2004 men förnyad utveckling började och stoppades igen i november 2007 med en v0.5 beta 1-version.
De nya funktionerna i v0.5 inkluderar en mycket uppgraderad och snabbare OpenGL- backend som använder framebuffer-objekt istället för PBuffers och harmoniserade koden kring standard OpenGL-gränssnitt istället för att använda proprietära leverantörstillägg. GLSL- stöd lades till som för all funktionalitet (komplex förgrening och loopar) som tidigare bara stöddes av DirectX 9 till OpenGL. I synnerhet betyder detta att Brook nu är lika kapabel på Linux som Windows .
Andra förbättringar i v0.5-serien inkluderar multi-backend-användning där olika trådar kan köra olika Brook-program samtidigt (och därmed maximera användningen av en multi-GPU-inställning) och SSE och OpenMP-stöd för CPU - backend (detta tillåter nästan maximal användning av modern CPU:er).
Prestandajämförelse
En liknande jämförelse mellan stationära CPU:er och GPGPU:er är problematisk på grund av algoritmiska och strukturella skillnader.
Till exempel kan en 2,66 GHz Intel Core 2 Duo utföra maximalt 25 GFLOP:er (25 miljarder flyttalsoperationer med enkel precision per sekund) om optimalt använder SSE och strömmande minnesåtkomst så att förhämtaren fungerar perfekt. Traditionellt (på grund av gränser för skuggningsprogram) tenderar dock de flesta GPGPU-kärnor att utföra relativt små mängder arbete på stora mängder data parallellt, så det stora problemet med att direkt exekvera GPGPU-algoritmer på stationära processorer är betydligt lägre minnesbandbredd som generellt sett. CPU:n tillbringar det mesta av sin tid med att vänta på RAM . Som ett exempel kan dual-channel PC2-6400 DDR2 RAM genomströmma cirka 11 Gbit/s vilket är cirka 1,5 GFLOPs maximalt givet att det finns totalt 3 GFLOPs totala bandbredd och man måste både läsa och skriva. Som ett resultat, om minnesbandbredden är begränsad, kommer Brooks CPU-backend inte att överstiga 2 GFLOPs. I praktiken är det ännu lägre än så, särskilt för allt annat än float4 som är den enda datatypen som kan SSE-accelereras.
På en ATI HD 2900 XT (740 MHz kärna 1000 MHz minne) kan Brook utföra maximalt 410 GFLOPs via sin DirectX 9-backend. OpenGL är för närvarande (på grund av begränsningar för drivrutiner och Cg -kompilator) mycket mindre effektiv som en GPGPU-backend på den GPU:n, så Brook kan bara hantera 210 GFLOP: er när man använder OpenGL på den GPU:n. På pappret ser detta ut som cirka tjugo gånger snabbare än processorn, men som precis förklarat är det inte så enkelt. GPU:er har för närvarande stora förgrenings- och läs-/skrivåtkomststraff, så förvänta dig ett rimligt maximum av en tredjedel av toppmaximum i verklig kod - detta lämnar fortfarande ATI-kortet på cirka 125 GFLOP:er ungefär fem gånger snabbare än Intel Core 2 Duo.
Detta minskar dock den viktiga delen av att överföra data som ska behandlas till och från GPU:n. Med ett PCI Express 1.0 x8-gränssnitt kan minnet i en ATI HD 2900 XT skrivas till med cirka 730 Mbit/s och läsas från med cirka 311 Mbit/s vilket är betydligt långsammare än normalt PC-minne. För stora datamängder kan detta avsevärt minska hastighetsökningen för att använda en GPU jämfört med en välinställd CPU-implementering. Eftersom GPU:er blir snabbare mycket snabbare än processorer och PCI Express-gränssnittet förbättras, blir det naturligtvis mer meningsfullt att ladda ner stor bearbetning till GPU:er.
Applikationer och spel som använder BrookGPU
Se även
externa länkar
- Officiell BrookGPU-webbplats - Stanford Universitys BrookGPU-webbplats