Djupdykning i Asynchronous Compute

Permalänk
Hjälpsam

@Yoshman: Tror att du målar fan på väggen, det är ju bara att ha två eller tre grenar, en till AMD en till Nvidia och en som fungerar på bägge.
Det är ju inte som att hela DX12 implementationen blir olika, det ger ju bara vissa fördelar i den kompilerade koden, jämför detta med kompileringsflaggor och bibliotek för olika CPU:r, skall vi ta bort detta också?

edit Jo just det, AoS kör på två grenar redan i dag.

Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

Permalänk

Frågan är hur mycket bättre de olika gcn korten blir och om man kommer märka det. Tar inget för givet men hade varit kul om mitt 390x blir mer framtidsäkert om ac implementeras i framtida spel.

Skickades från m.sweclockers.com

Visa signatur

5800X, Asus dual 4070, 32GB, Fractal newton R2 650 watt, Asus Prime B350-plus , Phanteks 400s vit, Asus TUF VG27AQ1A, Dell U2515H.
https://www.flickr.com/photos/albinivik/

Permalänk
Hjälpsam
Skrivet av Albinfiskare:

Frågan är hur mycket bättre de olika gcn korten blir och om man kommer märka det. Tar inget för givet men hade varit kul om mitt 390x blir mer framtidsäkert om ac implementeras i framtida spel.

Skickades från m.sweclockers.com

Hittade detta i artikeln.

Skrivet av sweclockers:

En utvecklare som dragit nytta av kombinationen Asynchronous Compute och Shader Intrinsic Functions är Id Software med senaste Doom. Tiago Sousa, chefsrenderare hos Id Software, har i flera inlägg på Twitter lyft fram de prestandavinster som företaget har uppnått med både Asynchronous Compute och Shader Intrinsic Functions. Bland annat nämner han att de vunnit 3-5 millisekunder i renderingen med Asynchronous Compute, något som vid en uppdateringstakt på 60 Hz innebär en enorm vinst i minskad latens, särskilt på konsolsidan.

http://www.sweclockers.com/artikel/22436-djupdykning-i-asynch...
3-5 ms låter kanske inte mycket, men med en fps på 60, har varje bildruta mindre än 17 ms på sig att renderas, då pratar vi om en sänkning med 20-30% av renderingstiden, vilket skulle motsvara 25-40% högre prestanda.

Nu kommer det nog inte att ge fullt så mycket i de flesta fall, men vinsten är helt klar betydande.

Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

Permalänk
Datavetare
Skrivet av SolidReactor:

För att förstå konsekvensen bättre, blir då förutsättningarna och scenarion eventuellt följande på branschnivå?
1) Att "Egenutvecklare" d.v.s. spelutvecklare som använder egen motor behöver lägga mer energi och pengar på de ISA som de vill stödja än tidigare behövt; vilket skulle innebär en ytterligare möjlighet för nvidia och amd vardera att "hjälpa" utvecklaren så att deras motor körs mera "exklusivt bra" (menar inte exklusivt som totallåsning), som en ytterligare möjlighet att "hjälpa" likt som dagens drivrutinsoptimering, kod-optimering, gameworks m.m..
Kan tänka mig att flera populära titlar kommer få sponsring för denna dx12/vulkan "boost" exklusivitet för grafiktillverkarens PR.

2) Engine utvecklare som UE, Unity & CryE kommer behöva lägga mycket(?) energi & resurser på att stödja och underhålla flera ISA som deras kunder(utvecklare) kan tänkas rikta sig mot inkl. mobilsidan. Innebär att det då blir en konkurrensfördel för stora engine-utvecklare ju mer komplext och svårare det blir att optimera och underhålla spelmotorer gentemot egenutvecklare av motorer, där båda som konkurrerar strävar efter prestanda.

Kan detta helt enkelt leda till att det blir mer svårmotiverat att behålla inhouse engines som i sin tur leder till vissa programmerare antingen mister jobb eller kommer bli lite mera åt UE, CryE eller Unity "engine specialist"?
Fördelen blir då kanske att det blir enklare som "engine specialist" att byta arbetsplats om den nya kör med samma populära motor eller att befintliga programmerare fokuserar mera på spelets mekaniker, funktioner, verktyg för speldesignerna och buggar?

Är detta som kan ske vid segmentering av detta slag på sikt tro eller är detta orimligt tänkt?

I fallet 1) gissar jag att man inte ser tillräckligt stort värde i att gå utanför det HLSL/SPIR-V ger. I fallet 2) däremot borde både AMD och Nvidia ha egenintresse i att ge så stora fördelar till sin teknik att de lägger signifikanta resurser här. Inte alls säker att konsolerna väger upp det faktum att Nvidia har långt mer ingenjörer som jobbar med programvara jämfört med de som jobbar med kretsdesign.

Många verkar gilla att spy galla på Gameworks. Tittar man lite objektivt på det så är faktiskt renderingskvalitén kontra kostnaden i saker som FXAA, HBAO+, Waveworks m.fl. faktiskt minst lika bra som andra försök, det oavsett om man kör det på GCN, Kepler eller Pascal. En sådan sak som AO (ambient occlusion) är dyrt, så självklart kostar HBAO+ en del att slå på. Det kostar däremot ungefär lika mycket på alla arkitekturer och idag är faktisk alla Gameworks funktioner byggd ovanpå standard DX med HLSL så det fungera på alla GPUer.

Går garanterat att pressa ut lite mer ur kretsarna om man skippar HLSL, det kommer inte vara någon gigantisk mängd men säg att det är tillräckligt för att precis hamna före konkurrentens GPU i ett par titlar. PR värdet är då stort, värdet för användarna är mer tvivelaktigt och vi kan då se fram emot ett Gameworks som kanske bara fungerar på Maxwell och Pascal (dessa har väldigt snarlika funktioner, Kepler skiljer sig rätt mycket).

Skrivet av Ratatosk:

@Yoshman: Tror att du målar fan på väggen, det är ju bara att ha två eller tre grenar, en till AMD en till Nvidia och en som fungerar på bägge.
Det är ju inte som att hela DX12 implementationen blir olika, det ger ju bara vissa fördelar i den kompilerade koden, jämför detta med kompileringsflaggor och bibliotek för olika CPU:r, skall vi ta bort detta också?

Som jag förstått det lilla jobbet att stödja både DX11 och OpenGL själva anropen mot de olika APIerna. Detta är rätt lätt att abstrahera. Den dyra delen är att konvertera HLSL till motsvarande GLSL.

Och det är absolut inte som att använda olika kompileringsflaggor, flaggor förändrar inte portabiliteten av källkoden medan användande av instricts i de flesta fall betyder att det överhuvudtaget inte går att kompilera koden för andra CPU-arkitekturer och potentiellt inte heller för vissa modeller av den en specifik arkitektur. Om jag t.ex. använder compiler instricts för AVX2 så kan inte programmet kompileras för något annat än Haswell och senare. Fungerar inte på någon annan CPU-arkitektur och inte heller på någon av AMDs nuvarande modeller eller Intel-modeller innan Haswell.

Säg att det blir populärt att använda "shader instricts functions", alla större spelmotorer får massor med optimeringar för AMDs och Nvidias nuvarande GPUer. Hur stor är nu inte tröskel för dessa företag att göra en förändring av ISA likt den AMD gjorde mellan VLIW4 och GCN eller den Nvidia gjorde mellan Tesla och Fermi?

Frågan är om vi inte redan ser en minskad vilja att ändra i ISA från båda lägren. GCN4 är identisk på ISA-nivå med GCN1.2. Skillnaden mellan GCN1.0 och GCN1.2 är inte speciellt stor, de är dock inte helt överlappande då man både tagit bort och lagt några enstaka saker mellan versionerna.

Skillnaden mellan Fermi, Kepler och Maxwell är rätt stor även om de i grunden använder samma ISA-format (skillnaderna här är betydligt större än mellan GCN1.0 och GCN4). Pascal verkar av allt att döma vara en strikt supermängd av Maxwell, det finns en del nya funktioner men allt som fungera på Maxwell ska även fungera på Pascal.

Huvudfrågan borde ändå vara: "marknaden" har efterfrågat ett standardiserat lågnivå API, vi har fått två sådana för PC i form av DX12 och Vulkan. Varför blanda in saker utanför standarden redan innan dessa teknik blivit varm i kläderna? Inte ens Apple som har total kontroll på sin plattform har blandat in något likt "shader instricts functions" i Metal (nog klokt då man kör Intel/AMD i macOS och PowerVR på iOS).

Så det är inte två grenar, det är minst tre. En för GCN (potentiellt uppdelad i GCN1.0 och GCN4 då det är de "stora" varianter då konsolerna kör med detta), en för Maxwell/Pascal och en generell för "resten". Ska alla ha en egen så ska även Intel skapa en egen gren, de har trots allt runt 70 % av GPU-marknaden på PC även om det kanske inte är förstahandsvalet för gamers.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Inaktiv
Skrivet av Ratatosk:

AMD Robert skall absolut inte förväxlas med Boxer Robert, AMD Robbert är IRL, medan Boxer Robert är virtuell.

Fel i artikeln, Nvidia kommer släppa nya drivrutiner till Maxwell som stödjer Async Shaders, kanske tom under detta decenium.

Nvidia Actively Working To Implement DirectX 12 Async Compute With Oxide Games In Ashes Of The Singularity
Nvidia Will Fully Implement Async Compute Via Driver Support
Relax, NVIDIA's Maxwell GPUs can do DX12 asynchronous shading after all
(Analyzis) Async compute is it true nvidia cant do it?
Nvidia Will Fully Implement Async Compute Via Driver Support, Oxide Confirms

Dessutom gör det ju försumbar skillnad, ID software har bara fått ut 20-30% högre prestanda.

Fast gäller det fortfarande för Maxwell? Det är ju artiklar som är ganska precis ett år gamla. Vore bra om någon form av stöd skulle tillkomma, om möjligt.

Själv ser jag Async Compute som något som tillkommer i utvecklingen av grafikkort. Det är ju en prestationshöjande teknisk lösning som möjliggör att krama ur ännu mer prestanda ur hårdvara. Är ju inte direkt första gången någon ny teknisk lösning tillkommer som äldre hårdvara inte stödjer och det är dessutom inget som forceras på utvecklare eller konsumenter. Tvärt om är det upp till utvecklarna att välja att använda det eller inte.

Om Async Compute varit så dåligt som vissa vill få det att framstå så hade inte Nvidia implementerat stöd i Pascal. Det är ytterligare en teknik som tillförs för att få bättre lösningar.

Skrivet av Albinfiskare:

Frågan är hur mycket bättre de olika gcn korten blir och om man kommer märka det. Tar inget för givet men hade varit kul om mitt 390x blir mer framtidsäkert om ac implementeras i framtida spel.

Skickades från m.sweclockers.com

Som R9 290-ägare så har jag ju noterat att mitt kort förbättrats rätt mycket sedan jag köpte den för snart tre år sedan. Dels drivrutinsförbättringar, sedan Mantles tillkomst och evolution till Vulkan men också DirectX 12. DOOM är, som jag ser det, ett spel som visar på möjligheterna Async Compute faktiskt ger. Att både Microsoft och Sony använder främst GCN-baserade grafiska lösningar men även ACE's och specifikt Async Compute i de spel som kommer ger ju stora fördelar för AMD som vann bägge tillverkare, åter fått dom för nya konsollerna men även oss Radeon-ägare som har GCN-baserade kort som får ut mer prestanda.

Jag menar, HD 7970, ett kort som närmar sig fem år (lanserad dec 2011) står sig ju fortfarande bra. Nu har den ju dock bara 2 ACE's vilket gör den mer jämnställd med grafiklösningen Xbox One använder men även där bör man ju se fördelar.
Största problemet är väl om kravet på VRAM drar iväg, men det är ju inget problem för er 390/390X-ägare, mer för oss med 290/290X.

8 ACE's i våra kort, lika som PS4. Bör ge fördelar framåt iallafall.

Permalänk
Hjälpsam
Skrivet av anon5930:

Fast gäller det fortfarande för Maxwell? Det är ju artiklar som är ganska precis ett år gamla. Vore bra om någon form av stöd skulle tillkomma, om möjligt.

Själv ser jag Async Compute som något som tillkommer i utvecklingen av grafikkort. Det är ju en prestationshöjande teknisk lösning som möjliggör att krama ur ännu mer prestanda ur hårdvara. Är ju inte direkt första gången någon ny teknisk lösning tillkommer som äldre hårdvara inte stödjer och det är dessutom inget som forceras på utvecklare eller konsumenter. Tvärt om är det upp till utvecklarna att välja att använda det eller inte.

Om Async Compute varit så dåligt som vissa vill få det att framstå så hade inte Nvidia implementerat stöd i Pascal. Det är ytterligare en teknik som tillförs för att få bättre lösningar.

Som R9 290-ägare så har jag ju noterat att mitt kort förbättrats rätt mycket sedan jag köpte den för snart tre år sedan. Dels drivrutinsförbättringar, sedan Mantles tillkomst och evolution till Vulkan men också DirectX 12. DOOM är, som jag ser det, ett spel som visar på möjligheterna Async Compute faktiskt ger. Att både Microsoft och Sony använder främst GCN-baserade grafiska lösningar men även ACE's och specifikt Async Compute i de spel som kommer ger ju stora fördelar för AMD som vann bägge tillverkare, åter fått dom för nya konsollerna men även oss Radeon-ägare som har GCN-baserade kort som får ut mer prestanda.

Jag menar, HD 7970, ett kort som närmar sig fem år (lanserad dec 2011) står sig ju fortfarande bra. Nu har den ju dock bara 2 ACE's vilket gör den mer jämnställd med grafiklösningen Xbox One använder men även där bör man ju se fördelar.
Största problemet är väl om kravet på VRAM drar iväg, men det är ju inget problem för er 390/390X-ägare, mer för oss med 290/290X.

8 ACE's i våra kort, lika som PS4. Bör ge fördelar framåt iallafall.

Jag var ironisk och listade en del av Nvidias "damage controll", efter det uppdagats att Maxwell inte klarade "Async Shaders".

Fanns massor av typer på forumen som argumenterade sig blåa.

  1. Maxwell klarar visst Async Shaders, det kommer snart stöd för detta via drivarna.

  2. Dessutom ger inte Async Shaders någon prestandavinst.

  3. Om det nu skulle ge någon prestandavinst ligger det långt i framtiden och då har Pascal släppts, då kan du byta ut ditt Maxwell mot ett Pascal.

  4. Så du kan lugnt köpa ett Nvidia Maxwell, det är minst lika framtidssäkert som ett AMD GCN-kort.

--=====================================================================

Jag tror vi kan se lyft på 20-40% för GCN gentemot Maxwell, i de titlar som utvecklats för DX12 och Vulkan från början, alltså inte något DX11 med lite DX12 spackel på.

Ett 390x kommer kanske slåss mot ett GTX980Ti, det gör det redan i Doom (verkar varit en bugg i drivarna, senare resultat ger GTX980 Ti ett övertag på ca 15%).

Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

Permalänk
Medlem
Skrivet av Yoshman:

Tycker sista raden är en dålig analogi, för att ta något mycket närmare:

Ett program skrivit i ren C kan kompileras och köras på precis alla CPU-arkitekturer som har en C-kompilator (vilket i praktiken är alla).

Det "shader intrinsic functions" gör är lägger till möjligheten att skriva inline-assembler. Lägger man in en enda rad x86 assembler går det inte längre att kompilera programmet för någon annan CPU-arkitektur.

Analogin här i det AMD säger är: de funktioner som används är ju främst assemblerinstruktioner som fanns redan i 8086. Det säkerställer att man kan köra programmet på precis alla kretsar som kör x86, men går fortfarande överhuvudtaget inte att köra på ARM.

Det som ger lite Pandoras ask känningar i "shader intrinsic functions" är två två saker. Dels lär man använda funktioner direkt från PS4/XBO, vilket betyder att det bara fungerar på GCN. Det kanske större problem är att om Nvidia nu kör någon form av "tile based rendering" i Maxwell och framåt så lär dessa kretsar har rätt mycket funktioner som absolut kan användas på sätt som inte passar andra GPUer...

Fördelen med högnivåspråk är att de kan kompileras till bytecode som passar olika platformar.
Fördelen med lågnivå är att man garanterat kan pressa ut varenda uns prestanda som finns att pressa ut med anpassad.

Att skapa möjligheten för att komma åt lågnivå betyder inte att möjligheten för högnivå försvinner eftersom den i slutändan kompileras till lågnivå.
Det kan fortfarande finnas högnivåspråk som genererar färdig bytecode för shaders för båda GPUerna. Det finns det t.ex idag. GLSL och HLSL.

Visa signatur

Hur många datorer är för många?

Permalänk
Skrivet av Oaktree:

"finns en väldigt stor risk för att vissa spel börjar fungera riktigt illa om man har "fel" GPU"

Du får det att låta som "Shader Intrinsic Functions" skulle vara någon slags blockering.

Nvida kommer ju kunna använda sig av dom funktioner som finns i DX12 / Vulkan i vilket fall. Så varför skulle det fungera dåligt om man har annat märke av GPU?

Är ju inte så att AMD "Shader Intrinsic Functions", kommer köras på Nvidia hårdvara, då just dessa funktioner endast fungerar på GCN arkitekturen.
Nvidia har sina egna "Shader Intrinsic Functions" för sina arkitekturer.

Så ser inte att detta skulle paja något för Nvidia, dom använder sig av de funktioner som finns i DX12/Vulkan, det är ju inte så att AMD försöker stoppa Nvidia från att lägga till sina egna "Shader Intrinsic Functions".

Även Nvidia ser prestanda boost i DOOM Vulkan:
https://www.youtube.com/watch?v=ZCHmV3c7H1Q

OT: Intressant och bra djupdykning i ämnet.

För att göra en liknelse så vill jag återvända till det glada(??) 90-talet o fejden MMX vs 3DNow (hette det så??). Det är precis den sorens problem som verkar exponeras.

Permalänk
Inaktiv
Skrivet av Ratatosk:

Jag var ironisk och listade en del av Nvidias "damage controll", efter det uppdagats att Maxwell inte klarade "Async Shaders".

Fanns massor av typer på forumen som argumenterade sig blåa.

  1. Maxwell klarar visst Async Shaders, det kommer snart stöd för detta via drivarna.

  2. Dessutom ger inte Async Shaders någon prestandavinst.

  3. Om det nu skulle ge någon prestandavinst ligger det långt i framtiden och då har Pascal släppts, då kan du byta ut ditt Maxwell mot ett Pascal.

  4. Så du kan lugnt köpa ett Nvidia Maxwell, det är minst lika framtidssäkert som ett AMD GCN-kort.

--=====================================================================

Jag tror vi kan se lyft på 20-40% för GCN gentemot Maxwell, i de titlar som utvecklats för DX12 och Vulkan från början, alltså inte något DX11 med lite DX12 spackel på.

Ett 390x kommer kanske slåss mot ett GTX980Ti, det gör det redan i Doom.

Ah, då hänger jag med.

Permalänk
Datavetare

Nvidia lär klarar sig från eventuella stämningar kring "async shaders" för Maxwell har absolut stöd för det på HW-nivå. Problemet med Maxwell tas ju bl.a. upp i denna artikel, man måste statiskt dela upp SM (StreamMultiprocessors, ett byggblock som i Maxwell och Pascal består av 128 CUDA-"kärnor") mellan de som hantera grafik och de som hanterar beräkningar. Gör man inte denna uppdelning perfekt så bestäms prestanda av den del som blir klar sist.

Möjligen kan man nu bli stämd då det verkar som Maxwell inte längre använder beräkningskön i HW utan man sammanfogar grafikkön (det DX12 kallar DIRECT queue) med beräkningskön (det DX12 kallar COMPUTE queue) till en HW-kö och slipper på så sätt dela upp SMs (DIRECT kön kan göra allt som COMPUTE kön kan så inget problem att posta jobb från den senare till en HW-kö som är kapabel att hantera den förra).

Pascal har alltså i grunden exakt samma stöd men med tillägget att kretsen kan dynamiskt konfigurera om alla SMs som jobbade på den del som blev klar först och flytta de till den andra uppgiften. Man kan nu få full beläggning på alla SMs och med rätt kombination av grafikjobb och beräkningsjobb (de ska stressa olika delar av GPUn för att ge en vinst) får man något högre total prestanda.

Effekten man specifikt får från att parallellt köra grafik och beräkningar är mycket riktigt över 30 % på konsoler, Uncharted 4 ska ligga upp mot 35 % vinst. På PC kommer vi aldrig se lika stor vinst som på dagens konsoler då den stora vinsten på konsol är att CPU-delen (inte GPU-delen) tenderar att vara flaskhals och man använder "async compute" för att avlasta CPU-delen. Gjorde man exakt samma sak på PC skulle prestanda bli lägre då man där i praktiken alltid har GPU-delen som flaskhals. Finns lite saker som kan öka effektiviteten på GPUn, är detta som ger runt 5-10 % ökning i Ashes of the Singularity (och det är fortfarande den speltitel som ser högst boost av "async compute").

Time Spy som i någon mening är en show-off benchmark för DX12 där AMD, Nvidia och Intel fått vara med och bestämma utformningen är den applikation på PC med överlägset störst boost specifikt från "async compute". Är runt 15 % på 390/390X/Fury/Fury X, runt 10 % för 480/380/380X, ca 5 % för Pascal och mindre än 5 % för GCN1.0 samt 0 % för Intel och Maxwell.

Att det pratas så mycket om "async compute" är nog en kombination av att det ger så mycket på konsoler, det är något som är relativt enkelt att stoppa in i existerande spel och det var något AMD kunde använda som slagträ mot Nvidia. Men faktum är att i de titlar det går att slå av/på "async compute" kan man kart och tydligt se att majoriteten av den boost man ser på AMDs GPUer kommer inte från "async compute" utan kommer från andra fördelar med DX12/Vulkan. Här har jag svårt att se hur vissa får det till Nvidia skulle ha problem med DX12/Vulkan, hur är det ett problem att man har så optimerade DX11/OpenGL drivare att man redan där har extremt hög nyttjande grad på GPUn? Kapaciteten på kretsen ökar ju inte bara för man byter API. Att AMD vunnit mer så här långt är ju inte förvånande när man tar i beaktande att t.ex. 390 har runt 50 % högre kapacitet på flera punkter jämför med 970, dessa två kort borde inte presterar så nära varandra som de historisk gjort.

Det stora värdet med DX12/Vulkan ligger i dess design som möjliggör mycket bättre användning av fler CPU-kärnor och lägre CPU-overhead. Detta förra är dock en nyhet som kräver att spelen designas från scratch mot detta API, är långt ifrån en snabbfix för existerande motorer. AMD ser redan idag en vinst här då man inte haft samma resurser att plöja ner i att optimera den gigantiska mängd kod som finns i dagens DX11 drivare. Men även för Vulkan och DX12 verkar Nvidia kommit förbi i effektivitet då t.ex. 1060 tenderar att utöka sin ledning (eller i fallet Doom/Vulkan, gå förbi) om man byter ut den överklockade 6700K/E-serie CPU som de flesta webbplatser testar med mot en långsammare CPU.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av IceDread:

Tänkte på en sak, man talar om asyncront och sekventiellt i artikeln och där vissa asyncrona anropen körs samtidigt med andra anrop. Tycker det lite konstigt att syncront skulle utesluta samtida anrop som tycks reserveras för asyncrona anrop.

Synkront innebär juh att du gör anropet o väntar på att det blir klart. Medans du väntar kan du inte göra andra anrop. Det gör å andra sidan att det är lätt att ha "koll på läget", dvs det görs en sak i taget.

Permalänk
Medlem
Skrivet av CamelCase:

Synkront innebär juh att du gör anropet o väntar på att det blir klart. Medans du väntar kan du inte göra andra anrop. Det gör å andra sidan att det är lätt att ha "koll på läget", dvs det görs en sak i taget.

Du missförstår. Sekventiellt har inte nödvändigtvis något med synkront eller asynkront över huvud taget.
Jag kan skriva ett program som kör multipla trådar / anrop samtidigt (dvs inte sekventiellt) och utförberäkningar samtidigt oavsett om jag gör metoderna synkrona eller asynkrona. Dock blir implementationen lite olika beroende på syftet.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare
Skrivet av kelthar:

Fördelen med högnivåspråk är att de kan kompileras till bytecode som passar olika platformar.
Fördelen med lågnivå är att man garanterat kan pressa ut varenda uns prestanda som finns att pressa ut med anpassad.

Att skapa möjligheten för att komma åt lågnivå betyder inte att möjligheten för högnivå försvinner eftersom den i slutändan kompileras till lågnivå.
Det kan fortfarande finnas högnivåspråk som genererar färdig bytecode för shaders för båda GPUerna. Det finns det t.ex idag. GLSL och HLSL.

Säger inte emot på den punkten, men peka gärna på ett konkret exempel där det i slutändan visat sig vara en god idé att frångå standarder för att vinna några 10-tals procent i prestanda. Är inte alls säker att AMD kommer dra det längsta strået heller, man har inte i närheten lika mycket folk som jobbar med programvara som Nvidia (eller Intel). Faktum är att AMD rätt många gånger skapat intressanta HW-lösningar som aldrig blivit något för man inte har resurser nog att hantera programvaran som behövs.

Både Nvidia och Intel lägger rejäla resurser på att skapa programvara som de sedan "ger" bort (citationstecken då det i vissa fall inte handlar om öppen källkod men man tar inte betalt specifikt för programvaran). De har råd med det då ökningen i HW-försäljning tack vare programvaran väger med råge upp FoU kostnaden. AMD har gjort sig av med nästan all personal som kan ta den bollen, man får helt förlita sig till att jobbet sker ändå tack vare konsolerna.

Om man distribuerar koden som bytekod finns möjlighet att i efterhand optimera den genererade koden via drivers, en möjlighet som inte finns i en BLOB. En sak som både moderna JVMer och Nvidias DX11 drivare utnyttjar är JIT (just in time compilation). Där använder man indata kring t.ex. hur villkorade hopp har utfallit i praktiken och använder den informationen för att generera om maskinkoden. Detta nämndes som fördel för Java redan när det var i sin linda, tog ungefär 20 år av utveckling men idag finns flera fall där JIT:ad Java-kod är snabbare än motsvarande skrivet i C/C++ och sedan kompilerat.

Och visst kan man skriva snabbare saker i assembler, men idag är kompilatorer och JITs så bra och kretsarna så komplicerade så även de mest erfarna programmerarna skriver i genomsnitt sämre kod än kompileratorer/JIT. Genomsnittsprogrammeraren skulle aldrig lyckas skriva något i assembler som är än kod skapad av en modern kompilator.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Albinfiskare:

Frågan är hur mycket bättre de olika gcn korten blir och om man kommer märka det. Tar inget för givet men hade varit kul om mitt 390x blir mer framtidsäkert om ac implementeras i framtida spel.

Skickades från m.sweclockers.com

Det beror på vilken sorts spel som köps. Vill folk ha många dynamiska effekter på skärmen så lär spelen gå i den riktningen. Dock med en viss fördröjning då async antagligen har en viss tröskel för utvecklarna.

Permalänk
Skrivet av Yoshman:

I fallet 1) gissar jag att man inte ser tillräckligt stort värde i att gå utanför det HLSL/SPIR-V ger. I fallet 2) däremot borde både AMD och Nvidia ha egenintresse i att ge så stora fördelar till sin teknik att de lägger signifikanta resurser här. Inte alls säker att konsolerna väger upp det faktum att Nvidia har långt mer ingenjörer som jobbar med programvara jämfört med de som jobbar med kretsdesign.

Många verkar gilla att spy galla på Gameworks. Tittar man lite objektivt på det så är faktiskt renderingskvalitén kontra kostnaden i saker som FXAA, HBAO+, Waveworks m.fl. faktiskt minst lika bra som andra försök, det oavsett om man kör det på GCN, Kepler eller Pascal. En sådan sak som AO (ambient occlusion) är dyrt, så självklart kostar HBAO+ en del att slå på. Det kostar däremot ungefär lika mycket på alla arkitekturer och idag är faktisk alla Gameworks funktioner byggd ovanpå standard DX med HLSL så det fungera på alla GPUer.

Går garanterat att pressa ut lite mer ur kretsarna om man skippar HLSL, det kommer inte vara någon gigantisk mängd men säg att det är tillräckligt för att precis hamna före konkurrentens GPU i ett par titlar. PR värdet är då stort, värdet för användarna är mer tvivelaktigt och vi kan då se fram emot ett Gameworks som kanske bara fungerar på Maxwell och Pascal (dessa har väldigt snarlika funktioner, Kepler skiljer sig rätt mycket).

Som jag förstått det lilla jobbet att stödja både DX11 och OpenGL själva anropen mot de olika APIerna. Detta är rätt lätt att abstrahera. Den dyra delen är att konvertera HLSL till motsvarande GLSL.

Jag har ingen aning om hur stabilt det är men gslang verkar kunna svälja HLSL o spotta ut SPIR.

Permalänk
Medlem
Skrivet av Yoshman:

Finns idag tre sätt att distribuera shaders

  1. man har en standardiserad kompilator vars utdata är någon form av byte-kod, varje drivare måste ha stöd för att översätta byte-kod till den ISA GPUn använder. Detta är hur HLSL i DX samt SPIR-V i Vulkan fungerar

  2. man distribuerar källkoden och kräver att varje drivare är kapabel att kompilera detta direkt från källkod till underliggande ISA. Detta är hur GLSL i OpenGL fungerar. Rent praktisk har detta visat sig vara en dålig idé då tolkning av källkod är relativt komplext och med denna metod måste göras av alla drivare. Det introducerar också fler felkällor jämfört med att distribuera bytekod.

  3. man levererar en BLOB för en specifik ISA direkt, detta fungerar ju utmärkt på konsoler och man slipper kostnaden för översättningssteget samt finns inga direkta standarder att följa utöver vad som dikteras av ISA

Utanför konsoler fungerar inte 3. till 100 % med mindre än att man gör en BLOB för varje tänkbar GPU ISA. Vad Doom gör är en kombination av 1. och 3. Problemet är att den som inte har en BLOB för sin ISA kommer alltid vara i underläge om det faktiskt finns fördelar med att använda "shader instricts functions". Förhoppningsvis ser Nvidia Doom som så pass strategiskt viktigt att man själva ställer upp resurser till en egen BLOB, tyvärr lär Pandoras ask vara öppen om det faktiskt ger en signifikant boost över att använda den generella vägen.

Rent tekniskt finns det ju inget som hindrar att man använder "shader instricts functions" på DX (skulle vara möjligt på alla versioner). Här hoppas i alla fall jag att Microsoft försöker hålla emot då denna teknik absolut har potentialen att fragmentera PC-spelmarknaden. Tror inte AMD har något emot detta, för varje 10 PC-spelare som går till konsol är det i genomsnitt 7-8 st som då byter från Nvidia till AMD.

Visst kan man som @Oaktree hävda att det öppnar upp möjligheter, finns absolut saker man kan göra i assembler som inte är möjligt i t.ex. C eller Java. Men skulle säga att man stänger än fler möjligheter, även här är modern C/C++ ett bra exempel på hur det borde hanteras.

Innan 2011 års C++ standard var det faktiskt inte möjligt att skriva ett multitrådat program i det språket utan att förlita sig på odefinierade beteende då standarden helt enkelt inte beskrev hur läsningar/skrivningar av data ska fungera när det sker från flera trådar. Under många år skrev man ändå massor med multitrådade program i C++, men man använde olika tekniker på olika OS och för synkronisering av data användes även olika funktioner på olika CPU arkitekturer (typiskt via kompilator-instricts eller inline-assembler). C++11 (och C11) gjorde det rätta, man lyfte blicken över funktioner hos enskilda CPU-arkitekturer och definierade vettiga funktioner för att ge ett modernt och intuitivt stöd för flertrådade program som körs på multicore CPUer. För vissa arkitekturer blev det mindre bra, t.ex. PowerPC och 32-bitars ARM medan det passade x86 rätt OK. ARM regerade på "rätt" sätt här, man såg till att Aarch64 (64-bitars ARM) blev en perfekt match till standarden och på pappret har man nu den ISA som bäst matchar de funktioner och definition som C, C++, Java m.fl. har kring garantier och krav som programmerare har i språken kring multitrådade program på multicore.

"Shader instricts functions" placerar grafik på den nivå "vanlig" programmering låg för 10 år sedan, känns rätt bakvänt då man sedan Glide m.fl. dog och ersattes med DX/OpenGL faktiskt haft en mycket bättre situation än "vanlig" programmering ur denna aspekt. Det kan mycket väl finnas brister i SPIR-V och HLSL, fixa problem i standarden då i stället för att använda proprietära lösningar. Att man kör detta i Vulkan känns extra irriterande med tanke på att 1.0 precis är släppt och AMD dragit ett stort lass där, vad är fel med SPIR-V?

DX12 - HLSL är ju en proprietär lösning, medans Vulkan - SPIR-V är en öppen lösning.
Vad är nyttan med att göra AMDs "Shader Intrinsic Functions" öppen? när dessa funktioner endast fungerar på AMDs hårdvara?

Som det står i GPUopen om detta så är just "Shader Intrinsic Functions" ett tillval "Extensions" till just SPIR-V och HLSL, detta kan användas ifall utvecklarna vill, för att få tillgång till den extra prestandan som finns. Så tror inte det är nåt fel på SPIR-V eller HLSL i sig.

Kan läsas om detta här: http://gpuopen.com/gcn-shader-extensions-for-direct3d-and-vul...

Permalänk
Quizmaster Malmö 22

Intressant artikel. Lite väl teknisk men det förstår jag att den måste vara.

Visa signatur

[Gigabyte EP35-DS4][Intel Core 2 Duo E8400 3.0 Ghz][2x2GB Corsair XMS 2][Gainward GTX 570][Sandisk Extreme II 480GB][Corsair HX 620W][Fractal Design Define XL R4][Acer GD245HQBID]

Permalänk
Medlem
Skrivet av Yoshman:

Säger inte emot på den punkten, men peka gärna på ett konkret exempel där det i slutändan visat sig vara en god idé att frångå standarder för att vinna några 10-tals procent i prestanda. Är inte alls säker att AMD kommer dra det längsta strået heller, man har inte i närheten lika mycket folk som jobbar med programvara som Nvidia (eller Intel). Faktum är att AMD rätt många gånger skapat intressanta HW-lösningar som aldrig blivit något för man inte har resurser nog att hantera programvaran som behövs.

Både Nvidia och Intel lägger rejäla resurser på att skapa programvara som de sedan "ger" bort (citationstecken då det i vissa fall inte handlar om öppen källkod men man tar inte betalt specifikt för programvaran). De har råd med det då ökningen i HW-försäljning tack vare programvaran väger med råge upp FoU kostnaden. AMD har gjort sig av med nästan all personal som kan ta den bollen, man får helt förlita sig till att jobbet sker ändå tack vare konsolerna.

Eftersom jag inte utvecklat spel för konsoller, så vet jag inte vilka verktyg man har idag för XB1 / PS4. Det borde dock finnas en hel del erfarenhet som går att överföra till PC-sidan. Att ha en spelmotor som presterar 10% bättre än alla andra är helt klart ett försäljningsargument för de som licensierar ut sådana.

Skrivet av Yoshman:

Om man distribuerar koden som bytekod finns möjlighet att i efterhand optimera den genererade koden via drivers, en möjlighet som inte finns i en BLOB. En sak som både moderna JVMer och Nvidias DX11 drivare utnyttjar är JIT (just in time compilation). Där använder man indata kring t.ex. hur villkorade hopp har utfallit i praktiken och använder den informationen för att generera om maskinkoden. Detta nämndes som fördel för Java redan när det var i sin linda, tog ungefär 20 år av utveckling men idag finns flera fall där JIT:ad Java-kod är snabbare än motsvarande skrivet i C/C++ och sedan kompilerat.

Och visst kan man skriva snabbare saker i assembler, men idag är kompilatorer och JITs så bra och kretsarna så komplicerade så även de mest erfarna programmerarna skriver i genomsnitt sämre kod än kompileratorer/JIT. Genomsnittsprogrammeraren skulle aldrig lyckas skriva något i assembler som är än kod skapad av en modern kompilator.

Nu pratar du så klart om större program. Jag hade inte velat skriva SAP eller AX i asm, men en shader är inte alls i samma storlek. På den gamla goda tiden så använde man sätt som xor ax,ax för att tömma ett register och spara klockcykler. Det är ett svagt exempel, eftersom det skulle kunna stoppas in i en kompilator också.

JIT är på många sätt bra, men dåligt på många. Android har ju kännt av detta. Det finns inget som säger att det inte skulle kunna finnas en AOT-kompilering av shadern vid start av applikationen. Det bästa hade varit en värld där man har möjlighet att köra olika paths, med inline-asm för specifik hårdvara.

Just när det gäller spel är prestanda superviktigt, så alla möjligheter för optimering bör då vara tillgängliga. Om det är någon som vill fördjupa sig och bli grym, låt dem bli det då.

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Visa signatur

Hur många datorer är för många?

Permalänk
Datavetare
Skrivet av Oaktree:

DX12 - HLSL är ju en proprietär lösning, medans Vulkan - SPIR-V är en öppen lösning.
Vad är nyttan med att göra AMDs "Shader Intrinsic Functions" öppen? när dessa funktioner endast fungerar på AMDs hårdvara?

Som det står i GPUopen om detta så är just "Shader Intrinsic Functions" ett tillval "Extensions" till just SPIR-V och HLSL, detta kan användas ifall utvecklarna vill, för att få tillgång till den extra prestandan som finns. Så tror inte det är nåt fel på SPIR-V eller HLSL i sig.

Kan läsas om detta här: http://gpuopen.com/gcn-shader-extensions-for-direct3d-and-vul...

Huruvida något är en standard eller ej är helt ortogonalt mot huruvida det är öppet eller ej. Du använder t.ex. en icke fri standard i form av IEEE 802.3 för att läsa detta.

Skrivet av CamelCase:

Jag har ingen aning om hur stabilt det är men gslang verkar kunna svälja HLSL o spotta ut SPIR.

Det där verkar ju vara något som främst är tänkt att erbjuda en referensimplementation av en GLSL kompilator. Viktigt för OpenGL då man där distribuerar källkoden till shaders i stället för bytekod och en väldigt stor felkälla i OpenGL program har varit allt för stora skillnader mellan olika shaderkompilatorer.

Sedan verkar man också ha en beta-implementation av att generera SPIR-V (i OpenGL är normal output maskinkod för underliggande GPU ISA). Det kopplat med att man också har en HLSL front-end gör det möjligt att kompilera både GLSL och HLSL till SPIR-V. Kan vara användbart för Vulkan men det löser inte problemet att kunna använda sådan som är skrivet i HLSL i OpenGL-program då dessa program vill ha GLSL som indata.

Vad som skulle behövas är en s.k. "transpiler" som kan översätta direkt från HLSL till GLSL. Lär vara rätt hopplöst att göra en sådan som fungerar tillfredsställande.

Finns däremot långt mer hopp om att kunna göra bra verktyg som tar HLSL som indata och ger bra SPIR-V ut. I det fallet blir det ju enkelt att stödja både DX och Vulkan med samma källkod. Som jag förstått det är HLSL och SPIR-V väldigt lika i vad de kan göra och hur de uttrycker det, men har inte kollat på detaljerna.

Skrivet av kelthar:

Eftersom jag inte utvecklat spel för konsoller, så vet jag inte vilka verktyg man har idag för XB1 / PS4. Det borde dock finnas en hel del erfarenhet som går att överföra till PC-sidan. Att ha en spelmotor som presterar 10% bättre än alla andra är helt klart ett försäljningsargument för de som licensierar ut sådana.

Nu pratar du så klart om större program. Jag hade inte velat skriva SAP eller AX i asm, men en shader är inte alls i samma storlek. På den gamla goda tiden så använde man sätt som xor ax,ax för att tömma ett register och spara klockcykler. Det är ett svagt exempel, eftersom det skulle kunna stoppas in i en kompilator också.

JIT är på många sätt bra, men dåligt på många. Android har ju kännt av detta. Det finns inget som säger att det inte skulle kunna finnas en AOT-kompilering av shadern vid start av applikationen. Det bästa hade varit en värld där man har möjlighet att köra olika paths, med inline-asm för specifik hårdvara.

Just när det gäller spel är prestanda superviktigt, så alla möjligheter för optimering bör då vara tillgängliga. Om det är någon som vill fördjupa sig och bli grym, låt dem bli det då.

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Jag lovar dig, bryr mig väldigt om mitt hantverk. Fast det är CPU-relaterat, är rent formellt glad amatör vad det gäller GPUer.

Med AOT tappar man möjlighet till hotspot-optimeringar baserad på statisk från aktuell körning, så AOT kan aldrig bli snabbare än fallet där man direkt kompilerar från källkod till maskinkod. AOT, i dess tekniskt korrekta form, kräver också fortfarande bytekod vilket man inte har med de som använder "shader instricts functions".

Fördelen med AOT och på Android är att uppstartstiden blir mycket lägre. Också så att om man kör koden få gånger, är ju rätt vanligt att man kanske kör något bara en eller någon enstaka gång per invokering i en miljö som Android, så ger AOT mycket bättre energieffektivitet jämfört med JIT. För GPUer är energikostnaden för några extra CPU-cykler för JIT irrelevant och det normala är att shaders körs ju miljontals gånger.

Jämför man AOT med traditionell kompilering från källkod till binärkod har AOT ett par fördelar, framförallt på GPUer där det finns lite skillnader i ISA mellan olika modeller. Binärkod specificerar up-front exakt vilka instruktioner som kan användas. Med kompilering till byte-kod följt av AOT så sker AOT på den specifika plattformen i ett läge där man vet exakt vilken CPU/GPU man kör på och man kan därför lägga ut instruktioner som är specifik för just den CPU/GPU-modellen. D.v.s. om bara bytekoden har möjlighet att uttrycka det man vill uttrycka så kan man på t.ex. ett system med GCN1.2 lägga ut precis de instruktioner som man nu tydligen explicit måste lägga ut via instricts.

Sedan är inte instricts samma sak som att skriva assembler, lovar dig att exakt noll spelprogrammerare skulle ha tid, ork eller kunnande att skriva bättre GPU-assembler än dagens kompilatorer. Dessa kretsar är än värre än moderna CPUer att hantera på den nivån. Vad det handlar om är att den genererade bytekoden inte kan uttrycka vad man vill göra på ett sätt så översättningen till maskinkod faktiskt kan använda "rätt" instruktion, med instricts kan man då tvinga in sådana instruktioner där det är vettigt.

Är ju samma problem med språk som C, C++ och Java. Går inte att uttrycka saker som matrisoperationer på ett sätt där kompilatorn kan bevisa att SIMD-instruktioner är "safe", vill då använda sådana instruktioner får man lägga ut dem manuellt eller köra med ett språk som kan uttrycka detta eller använda någon teknik/tillägg i dessa språk som gör det möjligt (se nedan).

Spännande att se att ungefär samma grupp som skrikit sig hesa kring hur dåligt Gameworks är då det är proprietärt (vilket är sant, men tekniken är helt byggd på standard DX11/HLSL så det fungerar på alla GPUer) helt plötsligt inte ser det minsta problem med en teknik som "shader instricts functions" där huvudsyftet är att kunna använda finesser som är specifik till en viss GPU-familj eller till och med en viss GPU-version...

Framförallt när det finns rätt mycket erfarenhet av vad "instricts" i praktiken resulterar i på Linux, finns en del saker som teoretisk borde fungerar hur bra som helst på andra CPUer än x86 men där man använt SSE/AVX instricts. Rätt ofta visar det sig att även om det är tekniskt möjligt att göra samma sak med NEON på ARM eller AltiVec på PPC så är skillnaden i detaljer så pass stora att det inte händer. Numera finns det allt mer generella metoder, som OpenCL för CPU och vektor stöd i tekniker som Cilk+, där man kan uttrycka vad man vill göra på en lite mer abstrakt nivå som då gör det möjligt för en kompilator att generera lämpliga instruktioner för underliggande SIMD-stöd.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Hjälpsam
Skrivet av Yoshman:

Nvidia lär klarar sig från eventuella stämningar kring "async shaders" för Maxwell har absolut stöd för det på HW-nivå. Problemet med Maxwell tas ju bl.a. upp i denna artikel, man måste statiskt dela upp SM (StreamMultiprocessors, ett byggblock som i Maxwell och Pascal består av 128 CUDA-"kärnor") mellan de som hantera grafik och de som hanterar beräkningar. Gör man inte denna uppdelning perfekt så bestäms prestanda av den del som blir klar sist.

Möjligen kan man nu bli stämd då det verkar som Maxwell inte längre använder beräkningskön i HW utan man sammanfogar grafikkön (det DX12 kallar DIRECT queue) med beräkningskön (det DX12 kallar COMPUTE queue) till en HW-kö och slipper på så sätt dela upp SMs (DIRECT kön kan göra allt som COMPUTE kön kan så inget problem att posta jobb från den senare till en HW-kö som är kapabel att hantera den förra).

Pascal har alltså i grunden exakt samma stöd men med tillägget att kretsen kan dynamiskt konfigurera om alla SMs som jobbade på den del som blev klar först och flytta de till den andra uppgiften. Man kan nu få full beläggning på alla SMs och med rätt kombination av grafikjobb och beräkningsjobb (de ska stressa olika delar av GPUn för att ge en vinst) får man något högre total prestanda.

Effekten man specifikt får från att parallellt köra grafik och beräkningar är mycket riktigt över 30 % på konsoler, Uncharted 4 ska ligga upp mot 35 % vinst. På PC kommer vi aldrig se lika stor vinst som på dagens konsoler då den stora vinsten på konsol är att CPU-delen (inte GPU-delen) tenderar att vara flaskhals och man använder "async compute" för att avlasta CPU-delen. Gjorde man exakt samma sak på PC skulle prestanda bli lägre då man där i praktiken alltid har GPU-delen som flaskhals. Finns lite saker som kan öka effektiviteten på GPUn, är detta som ger runt 5-10 % ökning i Ashes of the Singularity (och det är fortfarande den speltitel som ser högst boost av "async compute").

Time Spy som i någon mening är en show-off benchmark för DX12 där AMD, Nvidia och Intel fått vara med och bestämma utformningen är den applikation på PC med överlägset störst boost specifikt från "async compute". Är runt 15 % på 390/390X/Fury/Fury X, runt 10 % för 480/380/380X, ca 5 % för Pascal och mindre än 5 % för GCN1.0 samt 0 % för Intel och Maxwell.

Att det pratas så mycket om "async compute" är nog en kombination av att det ger så mycket på konsoler, det är något som är relativt enkelt att stoppa in i existerande spel och det var något AMD kunde använda som slagträ mot Nvidia. Men faktum är att i de titlar det går att slå av/på "async compute" kan man kart och tydligt se att majoriteten av den boost man ser på AMDs GPUer kommer inte från "async compute" utan kommer från andra fördelar med DX12/Vulkan. Här har jag svårt att se hur vissa får det till Nvidia skulle ha problem med DX12/Vulkan, hur är det ett problem att man har så optimerade DX11/OpenGL drivare att man redan där har extremt hög nyttjande grad på GPUn? Kapaciteten på kretsen ökar ju inte bara för man byter API. Att AMD vunnit mer så här långt är ju inte förvånande när man tar i beaktande att t.ex. 390 har runt 50 % högre kapacitet på flera punkter jämför med 970, dessa två kort borde inte presterar så nära varandra som de historisk gjort.

Det stora värdet med DX12/Vulkan ligger i dess design som möjliggör mycket bättre användning av fler CPU-kärnor och lägre CPU-overhead. Detta förra är dock en nyhet som kräver att spelen designas från scratch mot detta API, är långt ifrån en snabbfix för existerande motorer. AMD ser redan idag en vinst här då man inte haft samma resurser att plöja ner i att optimera den gigantiska mängd kod som finns i dagens DX11 drivare. Men även för Vulkan och DX12 verkar Nvidia kommit förbi i effektivitet då t.ex. 1060 tenderar att utöka sin ledning (eller i fallet Doom/Vulkan, gå förbi) om man byter ut den överklockade 6700K/E-serie CPU som de flesta webbplatser testar med mot en långsammare CPU.

Så Maxwell har stöd för "Async Shaders"! nu väntar vi bara på den nya drivrutinen.

De kommer absolut inte bli stämda, det är en av fördelarna med att låta någon underhuggare viska små rykten i örat på folk som jobbar på nyhetssaiter, inget officiellt bara lite FUD.

Det var likadant när, av någon anledning, ryktet spreds att det bara var Maxwell som klarade DX12.
Nvidia’s ace in the hole against AMD: Maxwell is the first GPU with full DirectX 12 support
NVIDIA Highlights DirectX 12 Strengths Over AMD

Lagt till länkar.
Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

Permalänk
Datavetare
Skrivet av Ratatosk:

Så de har stöd för det, nu väntar vi bara på den nya drivrutinen.
De kommer absolut inte bli stämda, det är en av fördelarna med att låta någon underhuggare viska små rykten i örat på folk som jobbar på nyhetssaiter, inget officiellt bara lite FUD.

De hade uppenbarligen slagit på stödet tidigare under året, resultatet blev ju att t.ex. Ashes of the Singularity blev något långsammare då drivaren inte lyckades dela upp SMs på optimalt sätt.

Lågnivåprofilering av Time Spy visar att man använder både grafikkön och beräkningskön i DX12 på Maxwell (man gör det på alla GPUer, även Intel). Men det ser ut som att drivaren sedan internt serialiserar jobben från de båda köerna till en HW-kö, så man har uppenbarligen tagit bort HW-stödet.

Notera att detta är helt och fullt är möjligt att göra utan att bryta mot något krav i DX12. Asynkront betyder inte vad väldigt många verkar tro det betyder, denna artikel var exemplarisk i att explicit använda ordet "parallell".

DX12 kräver att jobb som postas på DIRECT måste förutsättas vara asynkrona med jobb som postas på COMPUTE kön. Det är en implementationsdetalj huruvida man väljer att utnyttja det faktum att jobben från olika köer är oberoende i tid (asynkrona) genom att köra dem parallellt. Så trots att Skylake helt saknar möjlighet att köra grafik och beräkningar parallellt är det fortfarande den krets som stödjer mest utan DX12, följt utav Pascal och Maxwell (är endast dessa som stödjer feature level 12.1, Skylake har i något fall högre "tier" nivå men det ändrar inte vad man kan göra men däremot hur stora dataset man kan jobba på utan att dela upp jobbet).

Så i korthet stödjer alla GPUer som har en DX12 drivare "async compute" om man förstår vad "async" syftar på. I Maxwell försökte man även utnyttja det till att köra saker parallellt, men Maxwells design hade bara tagit CUDA-applikationer i beaktande så är endast rena beräkningsjobb där man i praktiken får någon vinst.

Fördelen att göra så på Maxwell (och Intel) är att spelutvecklarna slipper göra två olika backends, man behöver bara tänka på att dela upp sakerna så de GPUer där det är vettig att köra saker parallellt kan göra det. Är då teoretiskt möjligt att ändra om saker i praktiken körs seriellt eller parallellt per speltitel via drivers.

Edit: länken du lade till är både rätt och fel.

Den är fel då kravet för en fullständig DX12 implementation är att man stödjer APIet samt minst feature level 11.0.

Den är i någon mening rätt då Maxwell vid det tillfället var den enda kretsen med stöd för feature level 12.1 vilket var (och är) den högsta funktionella nivå som definierats. Men allt över 11.0 är frivilligt!

Från länken

"but Maxwell sounds like it’ll be the first GPU to have all of the necessary hardware blocks to fully support all of DX12’s new features."

Numera stödjer även Skylake detta men Maxwell var först. Polaris 10 stödjer upp till 12.0 (samma som GCN1.2 då de är ISA-identiska). Föga oväntat finns det några nya saker i Gameworks som kräver 12.1, men är ju inte värre en att dessa inte går att slå på om man har en GPU som saknar 12.1 stöd.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Hjälpsam

@Yoshman: Jag försöker särskilja "Async Compute" och "Async Shaders", jag tvivlar inte på att att Maxwell klarar "Async Compute", det är när man försöker köra kopiering, beräkning och grafik, asynkront som det blir problem.

Om man skrollar ner i denna länk från Wiki, ser det inte fullt så imponerande ut, för Maxwell.

Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

Permalänk
Datavetare
Skrivet av Ratatosk:

@Yoshman: Jag försöker särskilja "Async Compute" och "Async Shaders", jag tvivlar inte på att att Maxwell klarar "Async Compute", det är när man försöker köra kopiering, beräkning och grafik, asynkront som det blir problem.

Om man skrollar ner i denna länk från Wiki, ser det inte fullt så imponerande ut, för Maxwell.

Och faktum är att kretsen kan köra beräkningar och grafik parallellt, men det i praktiken ha visat sig vara bättre att köra dem i serie. Man ser också både på Pascal och GCN att vinsten att använda "async shaders" minskar ju färre kärnor man har och ju mer effektiv GPU- arkitekturen är (480 får mindre t.ex. boost än 380X).

Så visst hade det varit att föredra om redan Maxwell haft "dynamic allocation", men tittar man på Pascal så är det främst 1080 och Titan X som p.g.a. sina relativt stora antal CUDA-kärnor har lite problem att fullt ut nyttja alla resurser utan "async shaders".

Även för GCN så har ju 280X och nedåt i flera lägen visat noll eller till och med negativ effekt från "async shaders", det är inget att skrika om utan endast en naturligt konsekvens av varför tekniken överhuvudtaget kan ge ett positivt tillskott på PC (där man inte använder tekniken för GPGPU som på konsolerna).

Angående feature-level: hävdar inte att det har en relevant betydelse, Skylake dominerar ju och det har inte precis gjort den kretsen till "gamers choice". Säger bara att från båda sidor kastades det skit om att "den andra sidan stödjer minsann inte DX12 fullt ut". Båda sidor pratade i detta fall om något de uppenbarligen inte begrep. Att AMD och Nvidias PR-avdelningar försökte spinna det i fördel för sig själv borde de flesta klara av att genomskåda på teknikforumen kan man tycka.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Huruvida något är en standard eller ej är helt ortogonalt mot huruvida det är öppet eller ej. Du använder t.ex. en icke fri standard i form av IEEE 802.3 för att läsa detta.

Det där verkar ju vara något som främst är tänkt att erbjuda en referensimplementation av en GLSL kompilator. Viktigt för OpenGL då man där distribuerar källkoden till shaders i stället för bytekod och en väldigt stor felkälla i OpenGL program har varit allt för stora skillnader mellan olika shaderkompilatorer.

Sedan verkar man också ha en beta-implementation av att generera SPIR-V (i OpenGL är normal output maskinkod för underliggande GPU ISA). Det kopplat med att man också har en HLSL front-end gör det möjligt att kompilera både GLSL och HLSL till SPIR-V. Kan vara användbart för Vulkan men det löser inte problemet att kunna använda sådan som är skrivet i HLSL i OpenGL-program då dessa program vill ha GLSL som indata.

Vad som skulle behövas är en s.k. "transpiler" som kan översätta direkt från HLSL till GLSL. Lär vara rätt hopplöst att göra en sådan som fungerar tillfredsställande.

Finns däremot långt mer hopp om att kunna göra bra verktyg som tar HLSL som indata och ger bra SPIR-V ut. I det fallet blir det ju enkelt att stödja både DX och Vulkan med samma källkod. Som jag förstått det är HLSL och SPIR-V väldigt lika i vad de kan göra och hur de uttrycker det, men har inte kollat på detaljerna.

Jag lovar dig, bryr mig väldigt om mitt hantverk. Fast det är CPU-relaterat, är rent formellt glad amatör vad det gäller GPUer.

Med AOT tappar man möjlighet till hotspot-optimeringar baserad på statisk från aktuell körning, så AOT kan aldrig bli snabbare än fallet där man direkt kompilerar från källkod till maskinkod. AOT, i dess tekniskt korrekta form, kräver också fortfarande bytekod vilket man inte har med de som använder "shader instricts functions".

Fördelen med AOT och på Android är att uppstartstiden blir mycket lägre. Också så att om man kör koden få gånger, är ju rätt vanligt att man kanske kör något bara en eller någon enstaka gång per invokering i en miljö som Android, så ger AOT mycket bättre energieffektivitet jämfört med JIT. För GPUer är energikostnaden för några extra CPU-cykler för JIT irrelevant och det normala är att shaders körs ju miljontals gånger.

Jämför man AOT med traditionell kompilering från källkod till binärkod har AOT ett par fördelar, framförallt på GPUer där det finns lite skillnader i ISA mellan olika modeller. Binärkod specificerar up-front exakt vilka instruktioner som kan användas. Med kompilering till byte-kod följt av AOT så sker AOT på den specifika plattformen i ett läge där man vet exakt vilken CPU/GPU man kör på och man kan därför lägga ut instruktioner som är specifik för just den CPU/GPU-modellen. D.v.s. om bara bytekoden har möjlighet att uttrycka det man vill uttrycka så kan man på t.ex. ett system med GCN1.2 lägga ut precis de instruktioner som man nu tydligen explicit måste lägga ut via instricts.

Sedan är inte instricts samma sak som att skriva assembler, lovar dig att exakt noll spelprogrammerare skulle ha tid, ork eller kunnande att skriva bättre GPU-assembler än dagens kompilatorer. Dessa kretsar är än värre än moderna CPUer att hantera på den nivån. Vad det handlar om är att den genererade bytekoden inte kan uttrycka vad man vill göra på ett sätt så översättningen till maskinkod faktiskt kan använda "rätt" instruktion, med instricts kan man då tvinga in sådana instruktioner där det är vettigt.

Är ju samma problem med språk som C, C++ och Java. Går inte att uttrycka saker som matrisoperationer på ett sätt där kompilatorn kan bevisa att SIMD-instruktioner är "safe", vill då använda sådana instruktioner får man lägga ut dem manuellt eller köra med ett språk som kan uttrycka detta eller använda någon teknik/tillägg i dessa språk som gör det möjligt (se nedan).

Spännande att se att ungefär samma grupp som skrikit sig hesa kring hur dåligt Gameworks är då det är proprietärt (vilket är sant, men tekniken är helt byggd på standard DX11/HLSL så det fungerar på alla GPUer) helt plötsligt inte ser det minsta problem med en teknik som "shader instricts functions" där huvudsyftet är att kunna använda finesser som är specifik till en viss GPU-familj eller till och med en viss GPU-version...

Framförallt när det finns rätt mycket erfarenhet av vad "instricts" i praktiken resulterar i på Linux, finns en del saker som teoretisk borde fungerar hur bra som helst på andra CPUer än x86 men där man använt SSE/AVX instricts. Rätt ofta visar det sig att även om det är tekniskt möjligt att göra samma sak med NEON på ARM eller AltiVec på PPC så är skillnaden i detaljer så pass stora att det inte händer. Numera finns det allt mer generella metoder, som OpenCL för CPU och vektor stöd i tekniker som Cilk+, där man kan uttrycka vad man vill göra på en lite mer abstrakt nivå som då gör det möjligt för en kompilator att generera lämpliga instruktioner för underliggande SIMD-stöd.

Är väl medveten om att detta inte är en standard.

Därför dom gjort det till ett tillval "Extension", som är tillgänglig för utvecklarna, som kan använda detta om dom vill, för att få ut den extra prestanda som finns.

Om vi tar DOOM t.ex. så kan man använda openGL eller Vulkan, här är ju alla funktioner tillgängliga för alla GPUer, detta spel fungerar då på alla kort.
Vad är då problemet med att det finns "Shader Intrinsic Functions" för AMDs kort, för att ge lite extra prestanda?

Så länge det finns olika val, som gör att spelet fungerar på alla GPuer, så ser jag inget problem med det hela.

Om detta nu skulle vara ett så stort problem som du målar upp det till att vara, så får dom väll göra en meny där man kan aktivera/avaktivera denna funktion.

Permalänk
Medlem
Skrivet av Oaktree:

Om vi tar DOOM t.ex. så kan man använda openGL eller Vulkan, här är ju alla funktioner tillgängliga för alla GPUer, detta spel fungerar då på alla kort.
Vad är då problemet med att det finns "Shader Intrinsic Functions" för AMDs kort, för att ge lite extra prestanda?

Vi får väl hoppas att alla är lika positiva när Nvidia kommer med sina egna "Shader Intrinsic Functions" och det kommer spel som är helt optimerade för Nvidia.

Skrivet av Yoshman:

Spännande att se att ungefär samma grupp som skrikit sig hesa kring hur dåligt Gameworks är då det är proprietärt (vilket är sant, men tekniken är helt byggd på standard DX11/HLSL så det fungerar på alla GPUer) helt plötsligt inte ser det minsta problem med en teknik som "shader instricts functions" där huvudsyftet är att kunna använda finesser som är specifik till en viss GPU-familj eller till och med en viss GPU-version...

Undrar vad som händer när Nvidia kommer med sina funktioner?

Visa signatur

De köper en bil. Säljaren säljer bilen till dem. Var är du? Vart ska du? Varifrån kom du?

Permalänk
Medlem
Skrivet av ArcticFire:

Vi får väl hoppas att alla är lika positiva när Nvidia kommer med sina egna "Shader Intrinsic Functions" och det kommer spel som är helt optimerade för Nvidia.

Ser inget problem ifall Nvidia skulle lägga till denna funktion, sålänge spelet fungerar på alla kort, som jag skrev i tidigare inlägget.

Nvidia kan väll lägga till sina funktioner i DOOM, om dom nu så önskar.

Permalänk
Skrivet av Oaktree:

Ser inget problem ifall Nvidia skulle lägga till denna funktion, sålänge spelet fungerar på alla kort, som jag skrev i tidigare inlägget.

Nvidia kan väll lägga till sina funktioner i DOOM, om dom nu så önskar.

Klart de inte kan. Det är så vitt jag vet iDs egendom. Allt de kan göra är att erbjuda utvecklarna tekniska lösningar som snabbar upp spelen. Sen är det upp till utvecklarna att använda dem. Eventuellt låta sig övertygas av en påse pengar!

Permalänk
Skrivet av ArcticFire:

Vi får väl hoppas att alla är lika positiva när Nvidia kommer med sina egna "Shader Intrinsic Functions" och det kommer spel som är helt optimerade för Nvidia.

Undrar vad som händer när Nvidia kommer med sina funktioner?

Jag har svårt att se utvecklare som nappar på det. Det skulle innebära att de försvårar porteringsarbetet till konsoler. Dessutom, såååå stora vinster tvivlar jag på att det är med intrinsics. Den stora vinsten är async i sig.

Permalänk
Medlem
Skrivet av Firsov:

Känner mig blåst som har lagt ner 3,8 på Nvidia's 970...
Först 500 mb minne och nu få reda på att det är med dagens teknik lika korkat som ett AGP kort var när PCI-express kom ut..
Va ju så nära på att köpa ett 390 istället...
"Nvidias Mark Aevermann bekräftar problematiken och menar att det åtgärdats med arkitekturen Pascal." Okej så ni ska ha mer pengar?!

Aja. Rolig läsning hur som!
Men jag blev väldigt chockad faktiskt. Trodde redan att alla grafikkort hade såpass bra jobbhanteringen som det beskrivs här.
Att förra generationens kort inte kunde avbryta vissa jobb eller prioritera / samarbeta bättre var otippat!

Tycker verkligen inte du skall känna dig blåst.
970 kostade ungefär lika mycket som tex rx480 idag kostar och då har du i 2år kunnat njuta av mer eller mindre identiskt DX11 som handen på hjärtat är det majoriteten av alla titlar arbetar med och inga när det lanserade.
3,5gig problemet har ju i verkligheten visat sig vara ett mindre problem då drivrutinerna från Nvidia verkar jobbat runt problemet rätt bra.
Ja håller dock med om att det är fel av dem att gjort som de gjorde.

Personligen skulle jag känna mig mer blåst av att köpa ett liknande kort i 3-3,5kkr klassen idag och få väldigt lite extra prestanda och mer minne där GPUn ända kommer att vara en flaskhals i majoriteten av titlarna när all ram fylls.

Edit.
När PCI-e kom ut var portens prestanda förvisså högre mot AGP men grafikkorten hade ingen större glädje av det då den helt enkelt inte var flaskhalsen.

Permalänk
Medlem
Skrivet av Yoshman:

Sedan verkar man också ha en beta-implementation av att generera SPIR-V (i OpenGL är normal output maskinkod för underliggande GPU ISA). Det kopplat med att man också har en HLSL front-end gör det möjligt att kompilera både GLSL och HLSL till SPIR-V. Kan vara användbart för Vulkan men det löser inte problemet att kunna använda sådan som är skrivet i HLSL i OpenGL-program då dessa program vill ha GLSL som indata.

Jo, så har det alltid varit. HLSL och GLSL är för sig själva. Precis som Vulkan och DX12. Det ser jag inte att det kommer att ändras någonsin.

Skrivet av Yoshman:

Med AOT tappar man möjlighet till hotspot-optimeringar baserad på statisk från aktuell körning, så AOT kan aldrig bli snabbare än fallet där man direkt kompilerar från källkod till maskinkod. AOT, i dess tekniskt korrekta form, kräver också fortfarande bytekod vilket man inte har med de som använder "shader instricts functions".

Det håller jag med om.

Skrivet av Yoshman:

Sedan är inte instricts samma sak som att skriva assembler, lovar dig att exakt noll spelprogrammerare skulle ha tid, ork eller kunnande att skriva bättre GPU-assembler än dagens kompilatorer. Dessa kretsar är än värre än moderna CPUer att hantera på den nivån. Vad det handlar om är att den genererade bytekoden inte kan uttrycka vad man vill göra på ett sätt så översättningen till maskinkod faktiskt kan använda "rätt" instruktion, med instricts kan man då tvinga in sådana instruktioner där det är vettigt.

Jag tror att många indies/hobbyutvecklare (de som bygger egna motorer, bl.a jag) inte bryr sig om det och föredrar något som man behöver lägga så lite tid på som möjligt, medans de som sysslar med att utveckla och optimera spelmotorer 5 dagar i veckan ser fram emot att kunna få ut flera procent till. I detta fallet har vi faktiskt ett exempel och det är motorn till Doom. Det kör fortfarande bra på Nvidias kort och ännu bättre på AMDs.

Tvivlar inte på att det finns specifik optimisering som man kan göra på Nvidias kort som inte går på AMDs.

För att tillägga så har jag sysslat minimalt med shaders, då jag är mer intresserad av ansvarsområden, flöden, trådning och optimering.

Skrivet av Yoshman:

Spännande att se att ungefär samma grupp som skrikit sig hesa kring hur dåligt Gameworks är då det är proprietärt (vilket är sant, men tekniken är helt byggd på standard DX11/HLSL så det fungerar på alla GPUer) helt plötsligt inte ser det minsta problem med en teknik som "shader instricts functions" där huvudsyftet är att kunna använda finesser som är specifik till en viss GPU-familj eller till och med en viss GPU-version...

Jo, det är klart att fanboys är tramsiga. Dock så ser jag inte problemet med att viss hårdvara inom samma niché har extrafunktioner som annan hårdvara inte har. Fler knappar på tgb som styrs via drivers, etc.

Skrivet av Yoshman:

Framförallt när det finns rätt mycket erfarenhet av vad "instricts" i praktiken resulterar i på Linux, finns en del saker som teoretisk borde fungerar hur bra som helst på andra CPUer än x86 men där man använt SSE/AVX instricts. Rätt ofta visar det sig att även om det är tekniskt möjligt att göra samma sak med NEON på ARM eller AltiVec på PPC så är skillnaden i detaljer så pass stora att det inte händer. Numera finns det allt mer generella metoder, som OpenCL för CPU och vektor stöd i tekniker som Cilk+, där man kan uttrycka vad man vill göra på en lite mer abstrakt nivå som då gör det möjligt för en kompilator att generera lämpliga instruktioner för underliggande SIMD-stöd.

Klart att det kan bli komplext, dock så antar jag att linux kan köras på många fler olika typer av chip och instruktionsset än vad vi snackar om här. En kompilator kan dock inte alltid avgöra vad det mest optimala är.

Visa signatur

Hur många datorer är för många?