Skrivet av GilbertG:
Det har visat sig att drivrutinerna till Maxwell och Pascal analyserar alla shaders och byter ut en del mot varianter som går lättare att köra på deras kort.
#16264719
Det mesta som står i citatet länkat ovan är ju totalt svammel. T.ex. nämns detta
"Maxwell's Asychronous Thread Warp can queue up 31 Compute tasks and 1 Graphic task. Now compare this with AMD GCN 1.1/1.2 which is composed of 8 Asynchronous Compute Engines each able to queue 8 Compute tasks for a total of 64 coupled with 1 Graphic task by the Graphic Command Processor."
Då 8*8=64 > 31 så verkar författaren av detta använda detta som bevis för att GCN skulle vara bättre, eller "mer parallell". Dels är lär man då först definiera vad "mer parallell" betyder, men just antalet HW-köer är bevisat totalt irrelevant i frågan då analyser med GPUView visar att de spel som idag använder "async shaders" använder en COMPUTE-kö. Doom utvecklarna fick specifikt frågan om det var några problem att XBO endast har två ACEs medan PS4 har åtta, de sa att det var totalt irrelevant då den endast använder en compute-kö (som används parallellt med grafikkön).
Sen är hela poängen med DX HLSL och Vulkans SPIR-V att man levererar förkompilerade shader-kernels. Dessa är kompilerade till ett format som ingen GPU direkt använder, utan det är helt analogt med hur t.ex. Java-program kompileras till byte-kod som när det körs kompileras till maskinkod av en JIT.
Så Nvidia analyserar och kompilerar absolut om shaders. AMD lär åtminstone kompilera mellanformatet till den ISA som CGN använder, men förhoppningsvis gör de också analys samt optimeringar.
Finns inte heller något som tyder på att Kepler, Maxwell eller Pascal klarar väsentligt färre "draw-calls" jämfört med GCN. Det är tvärt om väldigt jämt mellan lägren här, är mer relevant vilken typ av arbete "draw-calls" utför, AMD har mer shader-kapacitet medan Nvidia har mer kapacitet i fixed-function stegen (geometry setup och rasterization).
Däremot har GCN (förutom de mindre GCN1.0 korten) och till någon del de största Nvidia kretsarna problem med dålig effektivitet i fork-join delen där en ström av "draw-calls" ska delas upp till en massiv mängd småproblem (grafik är extremt dataparallellt, men detta jobb måste distribueras och distributionen samt färdigställande av resultat är serialiseringspunkter och därmed potentiella flaskhalsar för skalning) när man använder DX11/OpenGL.
Dessa flaskhalsar försvinner inte med DX12 men där finns ett koncept som DX12 kallar "multi-engine" som gör det möjligt att ha flera parallella jobb igång (d.v.s. man inför uppgiftsparallellism ortogonalt med dataparallellism), tanken här är att likt Hyperthreading kan man bättre utnyttja beräkningsenheter som blir "idle" t.ex. vid serialiseringspunkter i ett jobb som körs av en annan "engine". Är idag bara GCN och Pascal som använder detta, Nvidia behöver inte detta alls lika mycket då de redan i DX11 borde kunna skapa egen uppgiftsparallellism likt hur ARM gör i Mali. Detta tack vare designen man har sedan Maxwell.