Skrivet av rullekorn82:
Async compute functionality would result in NO difference in time taken to complete the combined tasks of graphics + compute, because its running in parallel.
Detta uttalande är ungefär lika korrekt som att säga att det inte är "äkta" SMT om två saker som kör på olika CPU-trådar tar längre tid än att köra båda sakerna på två olika CPU-kärnor. Vinsten med SMT är att en fysisk kärna oftare kan utnyttjas närmare 100% av sin teoretiska kapacitet, maximal teoretisk kapacitet är dock den samma. En extra fysisk kärna ökar teoretisk prestanda, dock stannar prestanda per kärna vid samma nivå eller ofta så sjunker den något om man inte har i det närmaste obegränsat med oberoende saker att köra.
En stor fördel med något som ACE är att det ger GPU-delen en större möjlighet att använda tillgängliga resurser så nära 100% som möjligt, men precis som med SMT så ökar inte teoretisk kapacitet på något sätt. På pappret är AMDs GPUer definitivt starkare än Nvidias motsvarande modeller. En stor skillnad i mikroarkitektur mellan GCN och Maxwell är att den förra har en "bredare" design (kan köra fler saker parallellt) medan Maxwell är "smalare" men har mer resurser (och högre "IPC") per stream CPU.
Ta hur program schemaläggs. I GCN schemaläggs saker i form av en "wavefront" som är 64st strömmar som kör samma program men jobbar på olika delar av data (t.ex. ett pixel var). Motsvarande i Maxwell (och Fermi/Kepler) kallas "warp" och består av 32st strömmar. Har man data som inte går jämt upp med denna storlek som används inte GPU-resurserna optimalt, 64 ger mer "spill" än 32.
Ovanpå detta så kan Maxwell ha upp till 64 warps per associerade med en SMM, varav 4 av dessa är "aktiva" och någon av dessa 4 är den som körs varje cykel. Detta är nog det närmaste man kommer ACE i SMM/SMX: det är upp till 64 warps i "kön" varav 4st kan vara aktiva (2st i Fermi).
Motsvarande i GCN är att varje CU (compute-unit) kan ha upp till 40st wavefronts "aktiva" (är en CU per 64 streamprocessorer), dessa wavefronts plockas från olika jobbköer, bl.a. ACE. Notera att det är väldigt mycket fler "aktiva" minsta schemaläggningsmässigt minsta enheter i CGN (40 mot 4). Nu är denna jämförelse fortfarande ganska sned då en CU inte är direkt jämförbar med en SMX/SMM i hur den mappar till resurser och trådar, på det stora hela kan man ändå visualisera det som att GCN har fler "hypertrådar" per fysisk kärna än Maxwell/Kepler. Maxwell/Kepler har i stället mer resurser per tråd för att på så sätt undvika "stalls".
Vinsten med GCN-designen är att man normalt sett får ut högre teoretisk kapacitet med en viss transistorbudget. Vinsten med Maxwell-designen är att det är lättare att nå en viss nivå av teoretisk kapacitet, framförallt om det finns begränsad mängd jobb som kan köras oberoende av varandra.
Summa summarum av detta är att GCN är i grunden en enklare design sett per "streamprocessor", den behöver fler "hypertrådar" per fysisk kärna för att nå upp till sin teoretiska kapacitet jämfört med Maxwell. Se det lite som FX-8350 vs i5-2500, stora skillnaden här är att grafik är ett problem som har massor med potentiell parallellism så antal fall när man har nytta av många men svaga trådar är långt fler än i en CPU (som mer behöver låg latens -> hög enkeltrådprestanda).
För DX11, som för att vara ett modernt grafik API är relativ seriellt i sin design, så är Kepler/Maxwell en bättre design då dessa GPUer kommer i långt fler fall nå mycket närmare sin teoretiska kapacitet än vad GCN GPUerna kan. I DX12 kan GCN dra nytta av att ha fler "hypertrådar" (för att använda en term många har en känsla för vad den betyder, är tekniskt sett fel term), i detta fall i form av att kunna lägga ut massor med arbete som kan utföras oberoende av varandra via ACE och GPUn har nu mycket mer program att lägga ut på de resurser som av olika anledningar inte används fullt ut. Nvidia kommer se en mindre effekt av DX12 då de redan har en högre utnyttjandegrad i DX11.
Är designen av GCN och dess ACE som får mig tro att något väldigt likt DX12 var redan planerat för Win8. Varför designade annars AMD en GPU som lanserades år 2012 som de måste ha vetat aldrig skulle kunna presterar optimalt med ett API som DX11? Även Fermi innehåller saker som först i DX12 är användbart, Nvidia tog bort dessa i Kepler då de var meningslösa i DX11 och bidrog till högre strömförbrukning.
Edit: råkade ut för ett "interrupt" när jag skrev detta lilla inlägg, så lyckas glömma halva förklaringen om mikroarkitektur. Och sorry för wall-of-text, det är i alla fall kortare än att plöja alla whitepaper om GPU-arkitekturer
Edit2: försökte förenkla lite mer
Skrivet av Ozzed:
Dessutom står det ju i klartext att Nvidias kort bara klarar 31 köer medans AMD klarar alla 128 galant, så hur skulle det vara till Nvidias fördel i så fall?
Nvidia har inte 31 köer, man kan köra 32 (varav 31 verkar direkt åtkomliga via DX12) program samtidigt. Detta är inte samma sak som ACE, men DX12 säger inte "det ska fungera som ACE i GCN" utan vad DX12 säger är att man ska kunna definiera separata köer som kan utföra kommandon ("command queue"), beräkningar ("compute queue") samt kopiering av data ("copy/DMA queue"). På GCN är ACE en väldigt naturligt mappning, det enda DX12 dock kräver är att den implementation av DX12 som används utför dessa operationer samt att dessa köer kan användas oberoende från varandra, potentiellt från olika CPU-kärnor.
Min gissning här är att det inte finns en trivial ett-till-ett mappning av detta till Maxwell/Kepler (det finns i Tesla-korten då dessa har något Nvidia kallar Hyper-Q, men det finns inte i konsumentkorten). I slutändan kvittar det totalt om något utförs i GPUn, i CPUn eller en kombination av dessa, huvudsaken är att uppgiften utförs på rätt sätt med hög effektivitet.
Här tror jag Nvidia kommer behöva göra mer arbete i drivers jämfört med AMD. Man har delar av stödet i GPUn då det är möjligt att köra upp till 32 "program" samtidigt, men gissar att man måste göra prioritering av "program" och liknande i drivers -> Nvidia kommer behöva en mer avancerad driver jämfört med AMD. Om detta är fallet kommer det ta mer tid innan Nvidia har riktigt bra DX12 drivers, å andra sidan har man gång på gång visat att man är väldigt duktig på just programutvecklingsbiten (Nvidia har väsentligt många fler ingenjörer som jobbar med programvara jämfört med maskinvara, AMD verkar ha en motsatt fördelning).