Många människor, särskilt i stora artiklar som GT200 lanseringsartikel, hoppa över de mycket texttunga sidorna jag brukar skriva. Speciellt som jag har en känsla för tekniska detaljer på låg nivå som inte alla gillar.
I den här senaste satsningen på GPU-arkitektur, gissningsarbete, vi ägnade lite tid åt att spekulera om G80 och GT200 SP pipeline djup. Vår gissning var 8 steg baserat på djupet av andra arkitekturer vid den hastigheten och potentialen för slöseri med kraft med mycket djupa rörledningar. Det visar sig att vi kan ha gissat alldeles för lågt på den här (Anand: ahem, faktiskt någon kom på 15).
En av våra läsare, Denis Riedijk, hänvisade oss till NVIDIAs egna forum och CUDA programmeringsguide. Dessa källor avslöjar att korrekt döljning av instruktionslatens kräver 6 aktiva varp per SM. Matematiken på detta kommer ut till en effektiv latens på 24 cykler innan en warp kan schemaläggas för att bearbeta nästa instruktion i dess instruktionsström. Varje varp tar 4 cykler att bearbeta i en SM (4 trådar från en varp bearbetas på var och en av de 8 SP) och 6*4 är 24. Du kan också se det som 6 varp * 32 trådar/varp = 192 trådar och 192 trådar / 8 SP = 24 trådar per SP, och med en genomströmning på 1 instruktion per cykel = 24 cykler.
Min första tanke var att deras schemaläggningshårdvara kanske inte skulle kunna hantera schemaläggning av färre warps tillräckligt snabbt eller att sättet de hanterar lokalt minne kan kräva en fördröjning av någon annan anledning för att täcka läs-efter-skriv-beroende. Men genom att läsa igenom trådarna Denis pekade på att vi verkligen tycks indikera att det bara kan vara rörledningsdjupet som ger oss denna snålhet. Från NVIDIAs Mark Harris i en av trådarna:
“Latensen är cirka 22 klockor (detta är 1,35 GHz-klockan på 8800 GTX), och det tar 4 klockor för att exekvera en aritmetisk instruktion (ADD, MUL, MAD, etc,) för en hel warp.”
Det finns också en indikation på storleken på G80/GT200:s SP-registerfil i CUDA-forumen. Harris nämner att ett sätt att dölja ALU-latens är att se till att högst 25 % av det tillgängliga registerutrymmet används, eller 42 register per tråd. Det skulle sätta G80 på 168 register eller GT200 på 336 register per tråd.
Här är några länkar till vederbörande trådar ifall ni vill läsa igenom dem själva. Det är definitivt intressanta grejer.
Vilket för oss till en bredare punkt. NVIDIA kommer att behöva ge CUDA-utvecklare mer detaljer för att de ska kunna använda hårdvaran effektivt. Visst tror vi inte att Intel ger bort så mycket tekniska detaljer som de gör eftersom de är så välvilliga: utvecklare måste känna till detaljerna för att få ut det mesta av sin kod, och detta är mer och mer sant när du når upp in på HPC-marknaderna som NVIDIA siktar på. Företag som betalar hundratusentals för datorkluster är inte intresserade av att bara kasta bort datorkraft: de vill och behöver få ut det mesta av varje cykel.
Även om jag hoppas att NVIDIA kommer att fortsätta att gå i riktning mot att ge oss mer detaljer, eller åtminstone att ge oss den detalj som de redan delar offentligt med utvecklare, har vi verkligen en bättre uppfattning om var vi ska leta när vi vill ha låg -nivå teknisk information nu. Det verkar som att jag måste sätta mig ner och börja skriva alla de där CUDA-apparna som jag har skjutit upp.