GeirGrusom Skrevet 30. september 2009 Del Skrevet 30. september 2009 fra 60 til 15 fps Lenke til kommentar
NevroMance Skrevet 30. september 2009 Del Skrevet 30. september 2009 Shit. Det var utrolig mye også. Er det noen andre som har like mye fall? Kan hende det bare er en utrolig dårlig implementasjon, men virker veldig rart. Lenke til kommentar
jonnor Skrevet 30. september 2009 Del Skrevet 30. september 2009 Den samme demoen, en ekvivalent en eller en som gjør noe lignende? Hvis ikke det første så kan forskjellen mye annet enn openCL implementasjonen til nvidia. Lenke til kommentar
GeirGrusom Skrevet 6. oktober 2009 Del Skrevet 6. oktober 2009 Hmmm jeg synes OpenCL er litt teit laget, siden det av en eller annen grunn ikke støtter rekursive funksjoner (som får nVidia compileren til å bare avslutte programmet) Det er heller ikke støtte for float3, men derimot float4, float8 og float16. typedef struct { char hei; }hallo; har ingen effekt (slik som i C) en må skrive struct hallo { char hei; }; og bruke den med "struct hallo" senere, ellers får en masse compile feil. Det er heller ikke noen støtte for overloading (ikke ulikt C) som også er litt irriterende. nVidia sin compiler fungerer heller ikke. ptxas ptx input, line 341; error : Arguments mismatch for instruction 'selp': Retrieving binary for 'anonymous_jit_identity', for gpu='sm_11', usage mode=' 341:if(t < 0.0f || t > 1.0f) 342: return false; Lenke til kommentar
NevroMance Skrevet 6. oktober 2009 Del Skrevet 6. oktober 2009 OpenCL ligner veldig på CUDA på det området. Rekursive funksjoner er ikke mulig på GPU av en eller annen grunn. Kan være fordi det sjeldent er nødvendig og ofte er tregere enn en løkke. Mulig det er fordi det vil skape problemer pga. branching mangler. Er hvertfall ett designvalg nVidia har gjort i CUDA, og Khronos tydeligvis har gjort i OpenCL. Helt enig i at det er litt teit, men teitest av det du har nevnt er jo klart mangelen på float3 datatype, som finnes i alle shaderspråk. Lenke til kommentar
jonnor Skrevet 6. oktober 2009 Del Skrevet 6. oktober 2009 CUDA arkitekturen kan ikke rekursere fordi det ikke finnes noen stack. Det er også grunnen til at man ikke har funksjonspekere. Alle funksjoner som kalles blir inlinet. Du kan fint branche på CUDA, men dersom ikke alle trådene i et warp ikke tar samme branch så vil de trådene bare være gjøre no-ops til branchen er ferdig (koden blir serialisert). Lenke til kommentar
NevroMance Skrevet 6. oktober 2009 Del Skrevet 6. oktober 2009 (endret) Vet det går fint å branche, men problemet ligger i at det, som i f. eks. også på CELL prosessoren, ikke er veldig effektivt. Derfor vil ting som f. eks. unrolle løkker øke hastigheten på applikasjonen din. Viste derimot ikke at de andre trådene i warpen ville kjøre no-ops til resten var ferdig. Endret 6. oktober 2009 av NevroMance Lenke til kommentar
GeirGrusom Skrevet 6. oktober 2009 Del Skrevet 6. oktober 2009 Da ble det litt mer klart. Men de kunne fortsatt lagt til float3 Lenke til kommentar
Giddion Skrevet 7. oktober 2009 Forfatter Del Skrevet 7. oktober 2009 float3 passer ikke så bra i minnet da. Lenke til kommentar
jonnor Skrevet 7. oktober 2009 Del Skrevet 7. oktober 2009 Noe som kan føre til at det yter dårligere med float3 enn med float4. Så hvis ikke du har lite plass så bør du bruke float4 istedet. Lenke til kommentar
GeirGrusom Skrevet 7. oktober 2009 Del Skrevet 7. oktober 2009 Er klar over hele 16-byte alignment saken, men vanlige shadere har jo støtte for det Jeg får typedefe float3 til float4, og gjøre tilsvarende i host-programmet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå